Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
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
-
Konfigurieren Sie die von der Terraform-Automatisierung verwaltete Infrastrukturpipeline mit agilen Entwicklungspraktiken.
-
Richten Sie API-Schlüssel für den Benutzer ein, basierend auf denen der GitLab-Agent eine Verbindung zum OCI-Mandanten herstellt.
-
Richten Sie ein GitLab-Repository ein, in dem der gesamte Terraform-Code übertragen wird, und einen anfänglichen Terraform-Code, um OCI-Mandantendetails abzurufen.
-
Richten Sie eine YAML-basierte CI/CD-Pipeline ein, die Terraform-Aktionen auslöst, sobald der neue Code im Repository übertragen und genehmigt wird.
Voraussetzungen
-
Erforderlicher Zugriff auf OCI und Policys, die in Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) zulässig sind. Der Benutzer muss Zugriff auf die entsprechenden Ressourcen haben, die er mit Terraform-Code erstellen oder aktualisieren möchte.
-
Zugriff auf GitLab, um ein Repository, nachfolgende Pipeline und Codepush zu erstellen.
-
Grundlegendes Verständnis der agilen Methodik der Softwareentwicklung.
Aufgabe 1: API-Schlüssel einrichten
-
Melden Sie sich beim OCI-Mandanten mit dem Serviceaccount oder dem Admin-Benutzer an, und gehen Sie zu Benutzereinstellungen.
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.
-
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.
-
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.
Aufgabe 2: Repository GitLab mit Terraform-Code einrichten
-
Erstellen Sie ein Repository auf GitLab. Mit diesem Repository wird der Terraform-Code per Push übergeben.
-
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
-
Nachdem der Terraform-Code in das Repository GitLab übertragen wurde, erstellen wir die Pipeline und konfigurieren sie mit einer
yaml
-Datei. -
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
undapply
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.
- Alle Terraform-Befehle
Verwandte Links
Danksagungen
- Autor - Lovelesh Saxena (Principal Software Engineering Architect)
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.
Connect Terraform Code from a GitLab Repository to an OCI Tenancy using a CI/CD Pipeline
F94445-01
March 2024
Copyright © 2024, Oracle and/or its affiliates.