身為 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 容器映像。如果需要從專有存放庫下載映像,YAML 檔案必須包含具有 Docker 組態密碼的區段。請參閱使用智慧管線範本前在 Code Stream 中規劃 CICD 原生建置的 CD 部分 |
在 Docker Hub 存放庫中建立或更新構件時,Docker Hub 中的 webhook 會通知 Code Stream 中的 webhook,而後者會觸發管線。將執行下列動作:
- Docker Hub 向 webhook 中的 URL 傳送 POST 請求。
- Code Stream 執行 Docker 觸發器。
- Docker 觸發器啟動 CD 管線。
- CD 管線將構件推送至 Docker Hub 存放庫。
- Code Stream 觸發其 Docker webhook,後者會執行 CD 管線以將構件部署到 Docker 主機。
在此範例中,您在 Code Stream 中建立一個 Docker 端點和一個 Docker webhook,以將應用程式部署到 Kubernetes 開發叢集。步驟包括 Docker 發佈至 Webhook 中的 URL 之裝載的範例程式碼、其使用的 API 程式碼以及具有安全 Token 的驗證碼。
程序
- 建立 Docker 登錄端點。
- 按一下端點。
- 按一下新增端點。
- 開始輸入現有專案的名稱。
- 為類型選取 Docker 登錄。
- 輸入相關的名稱。
- 為伺服器類型選取 DockerHub。
- 輸入 Docker Hub 存放庫的 URL。
- 輸入可存取存放庫的名稱和密碼。
- 在 CD 管線中,設定輸入內容以在管線執行時自動插入 Docker 參數。
- 建立 Docker webhook。
- 按一下。
- 按一下新增適用於 Docker 的 Webhook。
- 選取專案。
- 輸入相關的名稱。
- 選取您的 Docker 登錄端點。
如果端點尚未存在,請按一下
建立端點並建立端點。
- 選取 webhook 要觸發的插入了 Docker 參數的管線。請參閱步驟 2。
- 輸入 API Token。
CSP API Token 會向您驗證與
Code Stream 的外部 API 連線。取得 API Token:
- 按一下產生 Token。
- 輸入與使用者名稱和密碼相關聯的電子郵件地址,然後按一下產生。
您產生的 Token 有效期為六個月。它也稱為重新整理 Token。
- 若要將 Token 保留為變數供日後使用,請按一下建立變數,輸入變數的名稱,然後按一下儲存。
- 若要將 Token 保留為文字值供日後使用,請按一下複製,然後將 Token 貼到文字檔中以在本機儲存。
您可以選擇建立變數並將 Token 儲存在文字檔中,以供日後使用。
- 按一下關閉。
- 輸入建置映像。
- 輸入標籤。
- 按一下儲存。
Webhook 卡隨即顯示並啟用 Docker webhook。如果您想要虛擬推送至 Docker Hub 存放庫,而不觸發 Docker webhook 並執行管線,請按一下
停用。
- 在 CD 管線中,設定 Kubernetes 部署工作。
- 在 Kubernetes 工作內容中,選取您的 Kubernetes 開發叢集。
- 選取建立動作。
- 為裝載來源選取本機定義。
- 然後,選取本機 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 = ""
- 在 Docker Hub 存放庫中建立 Docker 構件。或者,更新現有構件。
- 若要確認是否已觸發,並查看 Docker Webhook 上的活動,請按一下。
- 按一下執行,並在管線執行時觀察管線。
- 按一下執行階段,並在管線執行時檢視工作。
結果
恭喜您!您可以設定 Docker 觸發器以持續執行 CD 管線。您的管線現在可以將新的和更新的 Docker 構件上傳至 Docker Hub 存放庫。
下一步
確認新的或已更新的構件已部署至 Kubernetes 開發叢集中的 Docker 主機。