身為 Code Stream 管理員或開發人員,您可以在 Code Stream 雲端服務中使用 Docker 觸發器。每當建立或更新建置構件時,Docker 觸發器都會執行獨立的持續交付 (CD) 管線。Docker 觸發器將執行 CD 管線,而此管線會將新的或已更新的構件做為容器映像推送至 Docker Hub 存放庫。CD 管線可以做為自動化建置的一部分執行。

例如,若要透過 CD 管線持續部署已更新的容器映像,請使用 Docker 觸發器。當容器映像簽入 Docker 登錄時,Docker Hub 中的 webhook 會通知 Code Stream 該映像已變更。此通知會觸發 CD 管線以使用已更新的容器映像執行,並將映像上傳至 Docker Hub 存放庫。

若要使用 Docker 觸發器,您需要在 Code Stream 中執行數個步驟。

表 1. 如何使用 Docker 觸發器
您執行的操作... 有關該動作的詳細資訊...

建立 Docker 登錄端點。

若要讓 Code Stream 觸發管線,您必須有 Docker 登錄端點。如果端點不存在,您可以選取為 Docker 觸發器新增 webhook 時建立端點的選項。

Docker 登錄端點包含 Docker Hub 存放庫的 URL。

向管線新增可在管線執行時自動插入 Docker 參數的輸入參數。

您可以將 Docker 參數插入管線中。參數可包含 Docker 事件擁有者名稱、映像、存放庫名稱、存放庫命名空間和標籤。

您可以在 CD 管線中包含輸入參數,Docker webhook 會在管線觸發之前將這些輸入參數傳遞至管線。

建立 Docker webhook。

Code Stream 中建立 Docker webhook 時,它也會在 Docker Hub 中建立對應的 webhook。 Code Stream 中的 Docker webhook 透過包含在 webhook 中的 URL 連線到 Docker Hub。

webhook 彼此通訊,並在 Docker Hub 中建立或更新構件時觸發管線。

如果您稍後更新或刪除 Code Stream 中的 Docker webhook,Docker Hub 中的 webhook 會一併更新或刪除。

在管線中新增和設定 Kubernetes 工作。

在 Docker Hub 存放庫中建立或更新構件時,管線會觸發。然後,它會透過管線將構件部署到 Kubernetes 叢集中的 Docker 主機。

將本機 YAML 定義包含在工作中。

套用至您部署工作的 YAML 定義包含 Docker 容器映像,以及從存放庫擷取映像以進行部署所需的任何秘密金鑰。

在 Docker Hub 存放庫中建立或更新構件時,Docker Hub 中的 webhook 會通知 Code Stream 中的 webhook,而後者會觸發管線。將執行下列動作:

  1. Docker Hub 向 webhook 中的 URL 傳送 POST 請求。
  2. Code Stream 執行 Docker 觸發器。
  3. Docker 觸發器啟動 CD 管線。
  4. CD 管線將構件推送至 Docker Hub 存放庫。
  5. Code Stream 觸發其 Docker webhook,後者會執行 CD 管線以將構件部署到 Docker 主機。

在此範例中,您在 Code Stream 中建立一個 Docker 端點和一個 Docker webhook,以將應用程式部署到 Kubernetes 開發叢集。步驟包括 Docker 發佈至 Webhook 中的 URL 之裝載的範例程式碼、其使用的 API 程式碼以及具有安全 Token 的驗證碼。

必要條件

程序

  1. 建立 Docker 登錄端點。
    1. 按一下端點
    2. 按一下新增端點
    3. 輸入相關的名稱。
    4. 如果 Docker 登錄端點是內部部署端點,請選取雲端 Proxy。如果端點是雲端式端點,請保留設定為預設
    5. 選取Docker Hub 做為伺服器類型。
    6. 輸入 Docker Hub 存放庫的 URL。
    7. 輸入用於存取存放庫的名稱和密碼。
    建立 Docker 登錄端點。
  2. 在 CD 管線中,設定輸入內容以在管線執行時自動插入 Docker 參數。
    自動將 Docker 參數插入管線中。
  3. 建立 Docker webhook。
    1. 按一下觸發器 > Docker
    2. 按一下新增適用於 Docker 的 Webhook
    3. 選取專案。
    4. 輸入相關的名稱。
    5. 選取您的 Docker 登錄端點。
      如果端點尚未存在,請按一下 建立端點並建立端點。
    6. 選取 webhook 要觸發的插入了 Docker 參數的管線。請參閱步驟 2
      如果管線已設定使用自訂新增的輸入參數,[輸入參數] 清單會顯示參數和值。您可以輸入將透過觸發事件傳遞到管線的輸入參數的值。或者,您可以將這些值保留空白,或使用預設值 (如果已定義)。

      如需有關輸入索引標籤上參數的詳細資訊,請參閱手動新增工作前在 Code Stream 中規劃 CICD 原生建置

    7. 輸入 API Token。
      CSP API Token 會向您驗證與 Code Stream 的外部 API 連線。取得 API Token:
      1. 登入 vRealize Automation Cloud
      2. 按一下您名稱旁邊的下拉式箭頭。
      3. 按一下我的帳戶
      4. 按一下 API Token
      5. 按一下產生 Token
        1. 輸入 Token 名稱。
        2. 在 [組織角色] 下,選取組織擁有者
        3. 在 [服務角色] 下,按一下以展開 VMware Code Stream,然後選取 Code Stream 管理員
        4. 按一下產生

          已產生 Token 視窗會顯示具有您所指定名稱的 Token,以及您組織的名稱。

      6. 按一下複製圖示。

        按一下複製可確保您擷取精確字串,並且比使用指標複製字串更為可靠。

    8. 輸入建置映像。
    9. 輸入標籤。
      為 Docker 觸發器建立 webhook。
    10. 按一下儲存
      Webhook 卡隨即顯示並啟用 Docker webhook。如果您想要虛擬推送至 Docker Hub 存放庫,而不觸發 Docker webhook 並執行管線,請按一下 停用
  4. 在 CD 管線中,設定 Kubernetes 部署工作。
    1. 在 Kubernetes 工作內容中,選取您的 Kubernetes 開發叢集。
    2. 選取建立動作。
    3. 為裝載來源選取本機定義
    4. 然後,選取本機 YAML 檔案。
      例如,Docker Hub 可能會將下列本機 YAML 定義做為裝載發佈至 webhook 中的 URL:
      {
      "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"
      }
      }
      用於在 Docker Hub 中建立 webhook 的 API 採用下列格式: https://cloud.docker.com/v2/repositories/%3CUSERNAME%3E/%3CREPOSITORY%3E/webhook_pipeline/
      JSON 代碼本文類似於:
      {
      "name": "demo_webhook",
      "webhooks": [
      {
      "name": "demo_webhook",
      "hook_url": "http://www.google.com"
      }
      ]
      }
      若要從 Docker Hub 伺服器接收事件,在 Code Stream 中建立的 Docker webhook 的驗證配置會將允許清單驗證機制與 webhook 的隨機字串語彙基元搭配使用。它根據安全 Token 篩選事件,您可將安全 Token 附加至 hook_url
      Code Stream 可以使用設定的安全 Token 驗證來自 Docker Hub 伺服器的任何請求。例如: hook_url = IP:Port/pipelines/api/docker-hub-webhooks?secureToken = ""
  5. 在 Docker Hub 存放庫中建立 Docker 構件。或者,更新現有構件。
  6. 若要確認是否已觸發,並查看 Docker Webhook 上的活動,請按一下觸發器 > Docker > 活動
    檢視 Docker webhook 活動。
  7. 按一下執行,並在管線執行時追蹤管線。
    在管線執行時監視觸發的管線。
  8. 按一下執行階段,並在管線執行時檢視工作。
    在管線執行時檢視管線中的工作。

結果

恭喜您!您可以設定 Docker 觸發器以持續執行 CD 管線。您的管線現在可以將新的和更新的 Docker 構件上傳至 Docker Hub 存放庫。

後續步驟

確認新的或已更新的構件已部署至 Kubernetes 開發叢集中的 Docker 主機。