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 YAML-Definition angewendete Bereitstellungsaufgabe enthält das Docker-Container-Image. Wenn Sie ein Image aus einem privaten Repository herunterladen müssen, muss die YAML-Datei einen Abschnitt mit dem geheimen Docker-Konfigurationsschlüssel enthalten. Weitere Informationen finden Sie im CD-Abschnitt von Planen eines nativen CICD-Builds in Code Stream vor der Verwendung der intelligenten Pipeline-Vorlage

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

  • Stellen Sie sicher, dass eine Pipeline für die kontinuierliche Bereitstellung (Continuous Delivery, CD) in Ihrer Code Stream-Instanz vorhanden ist. Stellen Sie außerdem sicher, dass sie eine oder mehrere Kubernetes-Aufgaben enthält, die Ihre Anwendung bereitstellen. Weitere Informationen hierzu finden Sie unter Planen eines nativen Builds, der Integration und Bereitstellung von Code in Code Stream.
  • Stellen Sie sicher, dass Sie auf einen vorhandenen Kubernetes-Cluster zugreifen können, auf dem die CD-Pipeline Ihre Anwendung für die Entwicklung bereitstellen kann.
  • Vergewissern Sie sich, dass Sie Mitglied eines Projekts in Code Stream sind. Falls nicht, bitten Sie einen Code Stream-Administrator, Sie als Mitglied eines Projekts hinzuzufügen. Weitere Informationen hierzu finden Sie unter Vorgehensweise zum Hinzufügen eines Projekts in Code Stream.
  • Handelt es sich bei dem Docker-Hub-Repository um einen lokalen Endpoint, erstellen Sie einen Cloud-Proxy für die Kommunikation mit Code Stream. Ein Beispiel finden Sie unter Einrichten von Code Stream zum Modellieren des Freigabeprozesses.

Prozedur

  1. Erstellen eines Docker-Registrierungs-Endpoints.
    1. Klicken Sie auf Endpoints.
    2. Klicken Sie auf Neuer Endpoint.
    3. Beginnen Sie mit der Eingabe des Namens des vorhandenen Projekts.
    4. Wählen Sie Docker-Registrierung als Typ aus.
    5. Geben Sie einen relevanten Namen ein.
    6. 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.
    7. Wählen Sie Docker-Hub als Servertyp aus.
    8. Geben Sie die URL für das Docker-Hub-Repository ein.
    9. Geben Sie den Namen und das Kennwort für den Zugriff auf das Repository ein.
    Wenn Sie einen Docker-Registrierungs-Endpoint hinzufügen, müssen Sie das Zertifikat akzeptieren, da es vom Endpoint benötigt werden kann.
  2. Richten Sie die Eingabeeigenschaften in Ihrer CD-Pipeline so ein, dass Docker-Parameter bei Ausführung der Pipeline automatisch eingefügt werden.
    Wenn Sie einer Pipeline Eingabeparameter hinzufügen, klicken Sie auf die Registerkarte Eingabe und wählen den Parametertyp aus, z. B. Gerrit, Git oder Docker.
  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.
    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.
      Wenn Sie einen Webhook für den Docker-Auslöser erstellen, müssen Sie ein API-Token bereitstellen, das Sie für externe API-Verbindungen mit Code Stream authentifiziert.
    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.
    Sie können die Docker-Webhook-Commit-Zeiten, Images, Tags und mehr auf der Docker-Registerkarte Aktivität beobachten.
  7. Klicken Sie auf Ausführungen und beobachten Sie Ihre Pipeline während der Ausführung.
    Wenn die Pipeline ausgeführt wird, wird der Status WIRD AUSGEFÜHRT angezeigt, und die Phasensymbole zeigen den Fortschritt an.
  8. Klicken Sie auf die laufende Phase und zeigen Sie die Aufgaben an, während die Pipeline ausgeführt wird.
    Wenn Sie auf eines der Phasensymbole klicken, können Sie den Status jeder Aufgabe in der Phase beobachten, während die Pipeline ausgeführt wird.

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.