Hinweis:

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

Flussdiagramm

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

Aufgabe 1: OCI-Code-Repository DevOps einrichten

  1. 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.

  2. 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."
    }
    

    Konfiguration der ersten Benachrichtigung

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"

Shell-Artefakt erstellen

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.

  1. Erstellen Sie eine Deployment-Pipeline und eine Phase des Typs Shell.

    Shellphase erstellen

  2. 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.

    Artefakt auswählen

    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 und orm-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.

  1. Erstellen Sie eine Build-Pipeline und eine Phase des Typs Deployment auslösen.

    Erstellungsphase erstellen

  2. Klicken Sie auf Deployment-Pipeline auswählen, und wählen Sie die Pipeline aus, die Sie in Aufgabe 3 erstellt haben.

    Deployment-Pipeline auswählen

Aufgabe 5: Trigger erstellen

Wir müssen einen Trigger erstellen, der bei Codepushs aufgerufen wird.

  1. Navigieren Sie zu Trigger, und klicken Sie auf Trigger erstellen.

  2. 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.
  3. 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.

    Trigger erstellen

Aufgabe 6: Ablauf testen

Hier ist der Workflow, den wir bis zu diesem Punkt im Tutorial verfolgt haben.

  1. Code-Push.
  2. Trigger.
  3. Build-Pipeline.
  4. Deployment-Pipeline.
  5. 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.

  1. Neuen Code übertragen.

    Push-Code

  2. Bestätigen Sie, dass die Build-Pipeline ausgelöst wurde.

    Build in Bearbeitung

  3. Bestätigen Sie, dass die Deployment-Pipeline ausgelöst wurde.

    Deployment in Bearbeitung

  4. Shell-Skriptausführung erfolgreich bestätigen

    Testablauf erfolgreich

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:

  1. 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 die job_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.

  2. Jobstatus abrufen.

    Es muss geprüft werden, ob der Job erfolgreich war oder nicht erfolgreich war. Dazu übergeben wir die job_id an job get, was die Eigenschaften des Jobs zurückgibt. Wir kümmern uns insbesondere um die lifecycle-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.

  3. 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
    
  4. 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:

Flussdiagramm

Bestätigen Sie die Funktionsweise der Architektur.

  1. Neuen Code übertragen.

    Push-Code

  2. Bestätigen Sie, dass das Shell-Skript erfolgreich ausgeführt wird.

    Shell-Erfolg

  3. Bestätigen Sie, dass Terraform erfolgreich angewendet wurde.

    Benachrichtigungsthema aktualisiert

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.

Danksagungen

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.