Hinweis:

Terraform-Code über eine CI/CD-Pipeline von einem GitLab-Repository mit einem OCI-Mandanten verbinden

Einführung

Während wir in Oracle Cloud Infrastructure (OCI) oder einer anderen Cloud arbeiten, benötigen wir an jedem Ort klare Anweisungen zur Automatisierung, und eine der wichtigsten erforderlichen Automatisierungen ist für das Infrastruktur-Provisioning.

Benutzer möchten ihre Cloud-Infrastruktur mit Terraform bereitstellen. Wenn es Code gibt, möchten sie diese mit Agile-Entwicklungspraktiken in einem Code-Repository verwalten und auf vollständige Weise DevOps verwalten. Nachdem das Repository mit dem anfänglichen Code eingerichtet wurde, kann jeder Entwickler einen neuen Code einreichen und die neue Infrastruktur bereitstellen, die durch eine Continuous Integration and Continuous Delivery/Deployment-(CI/CD-)Pipeline ausgelöst wird.

In diesem Tutorial werden wir alle Schritte verstehen, die erforderlich sind, um die von der Terraform-Automatisierung verwaltete Infrastrukturpipeline auf agile Weise zu konfigurieren und GitLab als Repository-Provider zu verwenden. Dieselbe Vorgehensweise gilt für andere Anbieter wie GitHub und Azure DevOps.

Ziele

Voraussetzungen

Aufgabe 1: API-Schlüssel einrichten

  1. Melden Sie sich beim OCI-Mandanten mit dem Serviceaccount oder dem Admin-Benutzer an, und gehen Sie zu Benutzereinstellungen.

    Benutzereinstellungen öffnen

    Oder

    Sie können den Benutzer auch über die OCI-IAM-Konsole aufrufen. Stellen Sie einfach sicher, dass dieser Benutzer über den erforderlichen Zugriff zum Erstellen oder Aktualisieren der Infrastruktur auf OCI verfügt.

  2. Gehen Sie zum Abschnitt Ressourcen für den Benutzer, und klicken Sie auf API-Schlüssel und API-Schlüssel hinzufügen. Hier können Sie entweder den neuen öffentlichen und privaten Schlüssel herunterladen, den Public Key hochladen oder den Public Key einfügen.

    API-Schlüssel hinzufügen

  3. Nachdem Sie eine der Optionen ausgewählt haben, speichern Sie die Schlüssel an einem geeigneten Speicherort, und speichern Sie die Konfigurationsdatei wie in der folgenden Abbildung dargestellt. Sie benötigen diese Konfigurationsdatei und diesen Private Key, wenn Sie mit Terraform eine Verbindung zu Ihrem Mandanten herstellen.

    Konfigurationsdatei speichern

Aufgabe 2: Repository GitLab mit Terraform-Code einrichten

  1. Erstellen Sie ein Repository auf GitLab. Mit diesem Repository wird der Terraform-Code per Push übergeben.

    GitLab-Repository

  2. Entwickeln Sie den Terraform-Code, der für die Verbindung mit dem Mandanten erforderlich ist. In diesem Tutorial verwenden wir den Terraform-Code, um eine Verbindung zum Mandanten herzustellen und die Details der Availability-Domains abzurufen.

    • provider.tf.

      provider "oci" {
                tenancy_ocid     = var.tenancy_ocid
                user_ocid        = var.user_ocid
                fingerprint      = var.fingerprint
                private_key_path = var.private_key_path
                region           = var.region
      }
      
      terraform {
        required_providers {
          oci = {
            version = ">= 3.0.0"
          }
        }
      }
      
    • variables.tf.

      variable "tenancy_ocid" {
              type = string
              default = "ocid1.tenancy.oc1..aaaaaaaacko"
      }
      variable "user_ocid" {
              type = string
              default = "ocid1.user.oc1..aaaaaaaafelq"
      }
      variable "fingerprint" {
              type = string
              default = "72:d4:6c:f8:89"
      }
      variable "private_key_path" {
              type = string
              default =  "oracleidentitycloudservice_user_key.pem"
      }
      variable "region" {
              type = string
              default = "us-ashburn-1"
      }
      
    • oracleidentitycloudservice_user_key.pem.

      content of your private key
      
    • availability-domains.tf.

      data "oci_identity_availability_domains" "ads" {
          #Required
          compartment_id = var.tenancy_ocid
      }
      
    • outputs.tf.

      # The "name" of the availability domain to be used for the compute instance.
      output "name-of-first-availability-domains" {
        value = data.oci_identity_availability_domains.ads.availability_domains[0].name
      }
      

    Hinweis: Verwenden Sie die Werte aus der gespeicherten Konfigurationsdatei, um die Parameterwerte in die Datei variables.tf einzugeben.

Aufgabe 3: YAML-basierte CI/CD-Pipeline und Trigger auf Basis der Codezusammenführung einrichten

  1. Nachdem der Terraform-Code in das Repository GitLab übertragen wurde, erstellen wir die Pipeline und konfigurieren sie mit einer yaml-Datei.

    GitLab Repo-CICD

  2. Erstellen Sie eine .gitlab-ci.yml-Datei im Repository, und fügen Sie den folgenden Code hinzu.

    build-job:
      stage: build
      script:
        - echo "Hello Gitlab"
        - uname -r
        - yum install -y yum-utils
        - yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
        - sed -i 's/$releasever/7/g' /etc/yum.repos.d/hashicorp.repo
        - yum -y install terraform
        - pwd
        - ls -ltra
        - terraform init
        - terraform plan
        - terraform apply -auto-approve
    
    
    test-job1:
      stage: test
      script:
        - echo "This job tests something"
    
    test-job2:
      stage: test
      script:
        - echo "This job tests something, but takes more time than test-job1."
        - echo "After the echo commands complete, it runs the sleep command for 20 seconds"
        - echo "which simulates a test that runs 20 seconds longer than test-job1"
        - sleep 5
    
    deploy-prod:
      stage: deploy
      script:
        - echo "This job deploys something from the main branch."
      environment: dev
    

    Hinweis:

    • Alle Terraform-Befehle init, plan und apply werden in der Build-Phase ausgeführt. Sie können sie jedoch in der erforderlichen Phase entsprechend verwenden.
    • Diese Demodatei yml basiert auf GitLab-Agents, auf denen Oracle Linux 7 ausgeführt wird. Prüfen Sie die Verfügbarkeit von Terraform-Modulen basierend auf Ihrem Agent-BS und der Netzwerkverfügbarkeit.

Danksagungen

Weitere Lernressourcen

Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Außerdem können Sie education.oracle.com/learning-explorer besuchen, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.