Als Code Stream-Administrator oder Entwickler können Sie den Docker-Auslöser in den Code Stream-Cloud-Diensten verwenden. Der Docker-Auslöser führt eine eigenständige Pipeline für die kontinuierliche Bereitstellung (Continuous Delivery, CD) aus, wenn ein Build-Artefakt erstellt oder aktualisiert wird. Der Docker-Auslöser führt die CD-Pipeline aus, die das neue oder aktualisierte Artefakt als Container-Image an das Docker-Hub-Repository überträgt. Die CD-Pipeline kann als Teil Ihrer automatisierten Builds ausgeführt werden.

Verwenden Sie den Docker-Auslöser beispielsweise zur kontinuierlichen Bereitstellung des aktualisierten Container-Images über die CD-Pipeline. Wenn Ihr Container-Image in die Docker-Registrierung eingecheckt wird, benachrichtigt der Webhook im Docker-Hub Code Stream darüber, dass das Image geändert wurde. Diese Benachrichtigung löst aus, dass die CD-Pipeline mit dem aktualisierten Container-Image ausgeführt und das Image in das Docker-Hub-Repository hochgeladen wird.

Zur Verwendung des Docker-Images führen Sie mehrere Schritte in Code Stream aus.

Tabelle 1. Verwenden des Docker-Triggers
Vorgehensweise... Weitere Informationen zu dieser Aktion...

Erstellen eines Docker-Registrierungs-Endpoints.

Damit Code Stream Ihre Pipeline auslöst, müssen Sie über einen Docker-Registrierungs-Endpoint verfügen. Wenn der Endpoint nicht vorhanden ist, können Sie beim Hinzufügen des Webhooks zum Docker-Auslöser eine Option zur Erstellung des Endpoints auswählen.

Der Docker-Registrierungs-Endpoint enthält die URL für das Docker-Hub-Repository.

Hinzufügen von Eingabeparametern zur Pipeline, die bei Ausführung der Pipeline automatisch Docker-Parameter einfügen.

Sie können Docker-Parameter in die Pipeline einfügen. Parameter können den Namen, das Image, den Repository-Namen, den Repository-Namespace und das Tag des Docker-Ereignis-Besitzers enthalten.

Sie können Eingabeparameter in Ihre CD-Pipeline einfügen, die vor dem Auslösen der Pipeline vom Docker-Webhook an die Pipeline übergeben werden.

Erstellen eines Docker-Webhooks.

Wenn Sie den Docker-Webhook in Code Stream erstellen, wird im Docker-Hub ebenfalls ein entsprechender Webhook angelegt. Der Docker-Webhook in Code Stream stellt über die im Webhook enthaltene URL eine Verbindung zum Docker-Hub her.

Die Webhooks kommunizieren miteinander und lösen die Pipeline aus, wenn ein Artefakt im Docker-Hub erstellt oder aktualisiert wird.

Wenn Sie den Docker-Webhook in Code Stream aktualisieren oder löschen, wird der Webhook im Docker-Hub ebenfalls aktualisiert oder gelöscht.

Konfigurieren und Hinzufügen einer Kubernetes-Aufgabe zur Pipeline.

Wenn ein Artefakt im Docker-Hub-Repository erstellt oder aktualisiert wird, wird die Pipeline ausgelöst. Anschließend wird das Artefakt über die Pipeline dem Docker-Host in Ihrem Kubernetes-Cluster bereitgestellt.

Einschließen einer lokalen YAML-Definition in die Aufgabe.

Die auf die Bereitstellungsaufgabe angewendete YAML-Definition enthält das Docker-Container-Image und alle geheimen Schlüssel, die zum Abrufen des Images aus dem Repository für die Bereitstellung erforderlich sind.

Wenn ein Artefakt im Docker-Hub-Repository erstellt oder aktualisiert wird, benachrichtigt der Webhook im Docker-Hub den Webhook in Code Stream, wodurch die Pipeline ausgelöst wird. Die folgenden Aktionen werden durchgeführt:

  1. Der Docker-Hub sendet eine POST-Anfrage an die URL im Webhook.
  2. Code Stream führt den Docker-Auslöser aus.
  3. Der Docker-Auslöser startet die CD-Pipeline.
  4. Die CD-Pipeline überträgt das Artefakt an das Docker-Hub-Repository.
  5. Code Stream löst den zugehörigen Docker-Webhook aus, der eine CD-Pipeline ausführt, die das Artefakt auf Ihrem Docker-Host bereitstellt.

In diesem Beispiel erstellen Sie einen Docker-Endpoint und einen Docker-Webhook in Code Stream, der Ihre Anwendung auf dem Kubernetes-Entwicklungscluster bereitstellt. Die Schritte enthalten den Beispielcode für die Nutzlast, die von Docker an die URL im Webhook gesendet wird, den verwendeten API-Code sowie den Authentifizierungscode mit dem sicheren Token.

Voraussetzungen

Prozedur

  1. Erstellen eines Docker-Registrierungs-Endpoints.
    1. Klicken Sie auf Endpoints.
    2. Klicken Sie auf Neuer Endpoint.
    3. Geben Sie einen relevanten Namen ein.
    4. Handelt es sich um einen lokalen Docker-Registrierungs-Endpoint, wählen Sie den Cloud-Proxy aus. Behalten Sie bei einem Cloud-basierten Endpoint die Einstellung unter Standard bei.
    5. Wählen Sie Docker-Hub als Servertyp aus.
    6. Geben Sie die URL für das Docker-Hub-Repository ein.
    7. Geben Sie den Namen und das Kennwort ein, die für den Zugriff auf das Repository verwendet werden.
    Erstellen eines Docker-Registrierungs-Endpoints.
  2. Richten Sie die Eingabeeigenschaften in Ihrer CD-Pipeline so ein, dass Docker-Parameter bei Ausführung der Pipeline automatisch eingefügt werden.
    Automatisches Einfügen von Docker-Parametern in die Pipeline.
  3. Erstellen eines Docker-Webhooks.
    1. Klicken Sie auf Auslöser > Docker.
    2. Klicken Sie auf Neuer Webhook für Docker.
    3. Wählen Sie ein Projekt aus.
    4. Geben Sie einen relevanten Namen ein.
    5. Wählen Sie den Docker-Registrierungs-Endpoint aus.
      Wenn der Endpoint noch nicht vorhanden ist, klicken Sie auf Endpoint erstellen und erstellen Sie den Endpoint.
    6. Wählen Sie die Pipeline mit eingefügten Docker-Parametern aus, damit der Webhook ausgelöst wird. Weitere Informationen hierzu finden Sie unter Schritt 2.
      Wenn die Pipeline mit benutzerdefinierten hinzugefügten Eingabeparametern konfiguriert wurde, werden in der Liste der Eingabeparameter Parameter und Werte angezeigt. Sie können Werte für Eingabeparameter eingeben, die mit dem Auslöserereignis an die Pipeline übergeben werden. Alternativ können Sie auf die Eingabe von Werten verzichten oder die Standardwerte verwenden, sofern welche definiert sind.

      Weitere Informationen zu Parametern auf der Registerkarte „Eingabe“ finden Sie unter Planen eines nativen CICD-Builds in Code Stream vor dem manuellen Hinzufügen von Aufgaben.

    7. Geben Sie das API-Token ein.
      Das CSP-API-Token authentifiziert Sie für externe API-Verbindungen mit Code Stream. So rufen Sie das API-Token ab:
      1. Melden Sie sich bei vRealize Automation Cloud an.
      2. Klicken Sie auf den Dropdown-Pfeil neben Ihrem Namen.
      3. Klicken Sie auf Mein Konto.
      4. Klicken Sie auf API-Token.
      5. Klicken Sie auf Token generieren.
        1. Geben Sie einen Namen für das Token ein.
        2. Wählen Sie unter „Organisationsrollen“ die Option Organisationsbesitzer aus.
        3. Klicken Sie unter „Dienstrollen“ auf VMware Code Stream, um den Eintrag zu erweitern, und wählen Sie Code Stream-Administrator aus.
        4. Klicken Sie auf Generieren.

          Im Fenster Generiertes Token wird ein Token mit dem von Ihnen angegebenen Namen und dem Namen Ihrer Organisation angezeigt.

      6. Klicken Sie auf das Symbol KOPIEREN.

        Durch Klicken auf KOPIEREN wird sichergestellt, dass die exakte Zeichenfolge erfasst wird. Dies ist zuverlässiger als die Verwendung des Mauszeigers zum Kopieren der Zeichenfolge.

    8. Geben Sie das Build-Image ein.
    9. Geben Sie ein Tag ein.
      Erstellen eines Webhooks für den Docker-Auslöser.
    10. Klicken Sie auf Speichern.
      Die Webhook-Karte wird mit aktiviertem Docker-Webhook angezeigt. Wenn Sie einen Pseudo-Push zum Docker-Hub-Repository durchführen möchten, ohne den Docker-Webhook auszulösen und eine Pipeline auszuführen, klicken Sie auf Deaktivieren.
  4. Konfigurieren Sie in der CD-Pipeline die Kubernetes-Bereitstellungsaufgabe.
    1. Wählen Sie in den Kubernetes-Aufgabeneigenschaften den Kubernetes-Entwicklungscluster aus.
    2. Wählen Sie die Aktion Erstellen aus.
    3. Wählen Sie die Lokale Definition für die Nutzlastquelle aus.
    4. Wählen Sie dann Ihre lokale YAML-Datei aus.
      Beispiel: Der Docker-Hub sendet diese lokale YAML-Definition unter Umständen als Nutzlast an die URL im Webhook.
      {
      "callback_url": "https://registry.hub.docker.com/u/svendowideit/testhook/hook/2141b5bi5i5b02bec211i4eeih0242eg11000a/",
      "push_data": {
      "images": [
      "27d47432a69bca5f2700e4dff7de0388ed65f9d3fb1ec645e2bc24c223dc1cc3",
      "51a9c7c1f8bb2fa19bcd09789a34e63f35abb80044bc10196e304f6634cc582c",
      "..."
      ],
      "pushed_at": 1.417566161e+09,
      "pusher": "trustedbuilder",
      "tag": "latest"
      },
      "repository": {
      "comment_count": 0,
      "date_created": 1.417494799e+09,
      "description": "",
      "dockerfile": "#\n# BUILD\u0009\u0009docker build -t svendowideit/apt-cacher .\n# RUN\u0009\u0009docker run -d -p 3142:3142 -name apt-cacher-run apt-cacher\n#\n# and then you can run containers with:\n# \u0009\u0009docker run -t -i -rm -e http_proxy http://192.168.1.2:3142/ debian bash\n#\nFROM\u0009\u0009ubuntu\n\n\nVOLUME\u0009\u0009[\/var/cache/apt-cacher-ng\]\nRUN\u0009\u0009apt-get update ; apt-get install -yq apt-cacher-ng\n\nEXPOSE \u0009\u00093142\nCMD\u0009\u0009chmod 777 /var/cache/apt-cacher-ng ; /etc/init.d/apt-cacher-ng start ; tail -f /var/log/apt-cacher-ng/*\n",
      "full_description": "Docker Hub based automated build from a GitHub repo",
      "is_official": false,
      "is_private": true,
      "is_trusted": true,
      "name": "testhook",
      "namespace": "svendowideit",
      "owner": "svendowideit",
      "repo_name": "svendowideit/testhook",
      "repo_url": "https://registry.hub.docker.com/u/svendowideit/testhook/",
      "star_count": 0,
      "status": "Active"
      }
      }
      Die API, die den Webhook im Docker-Hub erstellt, sieht folgendermaßen aus: https://cloud.docker.com/v2/repositories/%3CUSERNAME%3E/%3CREPOSITORY%3E/webhook_pipeline/
      Der Text des JSON-Codes ähnelt Folgendem:
      {
      "name": "demo_webhook",
      "webhooks": [
      {
      "name": "demo_webhook",
      "hook_url": "http://www.google.com"
      }
      ]
      }
      Für den Empfang von Ereignissen vom Docker-Hub-Server verwendet das Authentifizierungsschema für den in Code Stream erstellten Docker-Webhook einen Authentifizierungsmechanismus mittels einer Zulassungsliste mit einem zufälligen Zeichenfolgen-Token für den Webhook. Ereignisse werden auf Basis des sicheren Tokens gefiltert, den Sie an hook_url anhängen können.
      Code Stream kann jede Anfrage vom Docker-Hub-Server mithilfe des konfigurierten sicheren Tokens überprüfen. Beispiel: hook_url = IP:Port/pipelines/api/docker-hub-webhooks?secureToken = ""
  5. Erstellen Sie ein Docker-Artefakt in Ihrem Docker-Hub-Repository. Oder aktualisieren Sie ein vorhandenes Artefakt.
  6. Um zu bestätigen, dass der Auslöser eingetreten ist, und die Aktivität auf dem Docker-Webhook anzuzeigen, klicken Sie auf Auslöser > Docker > Aktivität.
    Anzeigen der Aktivität des Docker-Webhooks.
  7. Klicken Sie auf Ausführungen und verfolgen Sie Ihre Pipeline während der Ausführung.
    Überwachen der ausgelösten Pipeline während der Ausführung.
  8. Klicken Sie auf die laufende Phase und zeigen Sie die Aufgaben an, während die Pipeline ausgeführt wird.
    Anzeigen der Aufgaben in der Pipeline während der Ausführung.

Ergebnisse

Herzlichen Glückwunsch! Sie richten den Docker-Auslöser so ein, dass die CD-Pipeline kontinuierlich ausgeführt wird. Ihre Pipeline kann jetzt neue und aktualisierte Docker-Artefakte in das Docker-Hub-Repository hochladen.

Nächste Maßnahme

Stellen Sie sicher, dass das neue oder aktualisierte Artefakt auf dem Docker-Host im Kubernetes-Entwicklungscluster bereitgestellt wird.