Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Ersetzen Sie diese Werte nach Abschluss der Übung durch Werte, die für Ihre Cloud-Umgebung spezifisch sind.
OCI Resource Manager-Deployments mit Oracle Cloud Infrastructure DevOps automatisieren
Einführung
Oracle Cloud Infrastructure (OCI) Resource Manager ist ein vollständig verwalteter Service, mit dem Teams Infrastructure as Code verwalten und automatisieren können (IaC). Sie ermöglicht es Teams, an der Terraform-Konfiguration zusammenzuarbeiten, Berechtigungen für verschiedene Aktionen zu definieren, Statussperren zur Vermeidung von Beschädigung bereitzustellen, alle Statusdateien automatisch im persistenten Speicher zu speichern und den Terraform-Provider zu konfigurieren. Für die Bereitstellung und das Deployment der gesamten Software, nicht nur von Terraform, gibt es OCI DevOps, eine End-to-End-Plattform für kontinuierliche Integration/kontinuierliche Bereitstellung (CI/CD) für Entwickler mit privaten Code-Repositorys, Triggern, Build- und Deployment-Pipelines usw.
OCI Resource Manager hat eine Automatisierung für Terraform und Integrationen mit mehreren Quellcodekontrollsystemen integriert, um grundlegende CI/CD zu erreichen. In diesem Tutorial erfahren Sie, wie wir OCI DevOps verwenden können, um diese CI/CD-Funktionen zu erweitern, indem wir OCI Resource Manager-Stacks automatisch für Terraform-Codeänderungen bereitstellen.
Der Flow
Der Prozess beginnt damit, dass ein Benutzer eine neue Terraform-Konfiguration in das Code-Repository überträgt, was die Build- und Deployment-Pipelines auslöst. Dies führt zur Erstellung einer Shell-Umgebung, die den OCI Resource Manager-Stack mit der OCI-Befehlszeilenschnittstelle (CLI) auf die neue Konfiguration anwendet.
Ziele
- Stellen Sie einen OCI Resource Manager-Stack bei Terraform-Änderungen automatisch erneut bereit.
Aufgabe 1: OCI-Code-Repository DevOps einrichten
-
Melden Sie sich bei der OCI-Konsole an, navigieren Sie zu Entwicklerservices, DevOps, Projekte, und erstellen Sie ein DevOps-Projekt, das alle Ressourcen in Ihrem CI/CD-Workflow enthält.
-
Erstellen Sie ein Code-Repository, und laden Sie die Terraform-Konfiguration hoch. Es gibt viele von Oracle bereitgestellte Vorlagen, die Sie verwenden können. In diesem Tutorial ändert Terraform einfach die Beschreibung eines OCI-Benachrichtigungen-Themas.
resource "oci_ons_notification_topic" "test_notification_topic" { #Required compartment_id = <compartment_id> name = "RM_DevOps_Automation_Tutorial" #Optional description = "This is a test notification topic." }
Aufgabe 2: Shell-Artefakt erstellen
Zuerst müssen Sie das Artefakt erstellen, das in der Deployment-Pipeline verwendet wird. Während ein Shellskript zur Ausführung der OCI-CLI ausgeführt wird, erstellen Sie ein Artefakt des Typs Befehlsspezifikation. In diesem Tutorial verwenden wir Artefaktquelle als Inline mit den folgenden Befehlen:
version: 0.1
component: command
timeoutInSeconds: 1200
steps:
- type: Command
timeoutinSeconds: 900
name: Invoke RMS
command: |
echo "Running RM apply command"
Weitere Informationen zur Syntax und zu zusätzlichen Parametern finden Sie in der Dokumentation zur Befehlsspezifikation. Weitere Details werden später zu diesem Skript hinzugefügt.
Aufgabe 3: Deployment-Pipeline erstellen
Deployment-Pipelines dienen zum Deployment von Artefakten.
-
Erstellen Sie eine Deployment-Pipeline und eine Phase des Typs Shell.
-
Klicken Sie auf Artefakt auswählen, und wählen Sie das in Aufgabe 2 erstellte Artefakt aus. Wählen Sie die Ausprägung und die Netzwerkkonfiguration aus, die Ihren Anforderungen entsprechen.
Hinweis: Policys: Beim Erstellen von Phasen wird eine Liste der empfohlenen Policys verknüpft. Fügen Sie sie hinzu. Außerdem interagiert unsere Deployment-Pipeline mit OCI Resource Manager und OCI Notifications. Stellen Sie daher sicher, dass Ihre dynamische Gruppe Zugriff auf
ons-topics
,orm-stacks
undorm-jobs
erhält. Weitere Informationen zu einer vollständigen Liste der Berechtigungen für jeden Service finden Sie unter Policy-Referenz.
Aufgabe 4: Build-Pipeline erstellen
Auch wenn wir keine Artefakte erstellen, benötigen wir noch eine Build-Pipeline, um unsere Deployment-Pipeline auszulösen.
-
Erstellen Sie eine Build-Pipeline und eine Phase des Typs Deployment auslösen.
-
Klicken Sie auf Deployment-Pipeline auswählen, und wählen Sie die Pipeline aus, die Sie in Aufgabe 3 erstellt haben.
Aufgabe 5: Trigger erstellen
Wir müssen einen Trigger erstellen, der bei Codepushs aufgerufen wird.
-
Navigieren Sie zu Trigger, und klicken Sie auf Trigger erstellen.
-
Geben Sie auf der Seite Trigger erstellen die folgenden Informationen ein.
- Quellverbindung: Geben Sie das OCI-Code-Repository ein.
- Code-Repository auswählen: Wählen Sie das in Aufgabe 1 erstellte Repository aus.
-
Klicken Sie auf Aktion hinzufügen, und geben Sie die folgenden Informationen ein.
- Build-Pipeline: Wählen Sie die Build-Pipeline aus, die in Aufgabe 4 erstellt wurde.
- Ereignis: Wählen Sie Push aus.
- Ausführungsbedingungen erstellen: Geben Sie diese entsprechend Ihrem Anwendungsfall ein. In dieses Beispiel geben Sie die folgenden Informationen ein.
- Quellverzweigung: Geben Sie main ein.
- Zu berücksichtigende Dateien: Geben Sie main.tf ein.
Aufgabe 6: Ablauf testen
Hier ist der Workflow, den wir bis zu diesem Punkt im Tutorial verfolgt haben.
- Code-Push.
- Trigger.
- Build-Pipeline.
- Deployment-Pipeline.
- Shell-Skript führt
echo "Running RM apply command"
aus.
Bestätigen Sie die Arbeit des Workflows, bevor Sie dem Shellskript mehr Komplexität hinzufügen.
-
Neuen Code übertragen.
-
Bestätigen Sie, dass die Build-Pipeline ausgelöst wurde.
-
Bestätigen Sie, dass die Deployment-Pipeline ausgelöst wurde.
-
Shell-Skriptausführung erfolgreich bestätigen
Alles funktioniert wie erwartet. Die letzte Aufgabe besteht darin, unser Shell-Skript neu zu gestalten, um den Resource Manager-Stack auszulösen.
Aufgabe 7: Shellskript ändern, um Resource Manager-Stack auszulösen
Die Shell Stage Container Image Runtime umfasst Shell Interpreter, Shell Utilitys, CLIs und viele weitere Tools. Weitere Informationen finden Sie unter Laufzeitdetails für Shell-Containerimage.
Wir nutzen die OCI-CLI, um Resource Manager aufzurufen. Unser Shell-Skript sieht derzeit wie folgt aus:
version: 0.1
component: command
timeoutInSeconds: 1200
steps:
- type: Command
timeoutinSeconds: 900
name: Invoke RMS
command: |
echo "Running RM apply command"
So ändern Sie das Shell-Skript:
-
einen Job zu erstellen.
Der erste Anruf, den wir machen werden, ist
create-apply-job
. Dadurch wird ein Apply-Job in unserem Resource Manager-Stack erstellt. Wir speichern auch diejob_id
des Jobs als Variable, um den Job im nächsten Schritt zu referenzieren.job_id=$(oci resource-manager job create-apply-job --stack-id <Stack OCID> --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output)
Weitere Informationen finden Sie unter OCI-CLI-Befehlsreferenz: create-apply-job.
-
Jobstatus abrufen.
Es muss geprüft werden, ob der Job erfolgreich war oder nicht erfolgreich war. Dazu übergeben wir die
job_id
anjob get
, was die Eigenschaften des Jobs zurückgibt. Wir kümmern uns insbesondere um dielifecycle-state
.job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"')
Weitere Informationen finden Sie unter OCI-CLI-Befehlsreferenz: Job abrufen.
-
Analysieren Sie den Jobstatus.
Fügen Sie Logik hinzu, um den Beendigungscode zu ändern, je nachdem, ob der Job erfolgreich war (0) oder nicht erfolgreich war (1).
if [ $job_state == SUCCEEDED ]; then echo "Resource Manager job succeeded" exit 0 else echo "Resource Manager job failed" exit 1 fi
-
Nachdem Sie die vorherigen Schritte aggregiert und einige zusätzliche Druckanweisungen hinzugefügt haben, sollte Ihr Shellskript in etwa wie folgt aussehen:
version: 0.1 component: command timeoutInSeconds: 1200 steps: - type: Command timeoutinSeconds: 900 name: Invoke RMS command: | echo "Running RM apply command" job_id=$(oci resource-manager job create-apply-job --stack-id ocid1.ormstack.oc1.iad.amaaaaaann2vciya6arauok6db5epqnhlfdmbf5ee7td6gydzwvarzanaxyq --execution-plan-strategy AUTO_APPROVED --wait-for-state SUCCEEDED --wait-for-state FAILED --query data.id --raw-output) echo "RMS plan job id is:" echo $job_id job_state=$(oci resource-manager job get --job-id $job_id --raw-output --query 'data."lifecycle-state"') echo "Apply job lifecycle-state is:" echo $job_state if [ $job_state == SUCCEEDED ]; then echo "Resource Manager job succeeded" exit 0 else echo "Resource Manager job failed" exit 1 fi
Hinweis: Dies ist ein einfaches Beispiel für die grundlegende Funktionalität. Sie können das Skript an Ihre Anforderung anpassen.
Aufgabe 8: End-to-End-Test
Ihre vollständige Architektur und Ihr Ablauf sollten wie folgt aussehen:
Bestätigen Sie die Funktionsweise der Architektur.
-
Neuen Code übertragen.
-
Bestätigen Sie, dass das Shell-Skript erfolgreich ausgeführt wird.
-
Bestätigen Sie, dass Terraform erfolgreich angewendet wurde.
Nächste Schritte
In diesem Tutorial wurde gezeigt, wie Sie OCI Resource Manager-Stack-Deployments mit OCI DevOps automatisieren. Dies ist ein einfaches Beispiel für den grundlegenden Ablauf. Es wird empfohlen, die erlernten Konzepte zu nutzen und darauf aufzubauen, sie an Ihren Anwendungsfall anzupassen und sie in Ihre vorhandenen CI/CD-Pipelines zu integrieren.
Verwandte Links
Danksagungen
- Autoren – Cody Brinkman (Cloud Architect), Qian Chen (Mitglied des technischen Personals, OCI Developer Tools & Services) und Nandan Kandregula (Software Development Manager, OCI Developer Tools & Services)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Use Oracle Cloud Infrastructure DevOps to Automate OCI Resource Manager Deployments
G16597-01
October 2024