本文說明如何在部署前和/或部署後執行任意程式或作業。
您可以設定 Cloud Deploy 和 Skaffold 來執行動作,以便執行部署前和/或部署後動作。以這種方式執行的程式稱為「鉤子」。預先部署和後期部署掛鉤會在推出作業中做為預先部署和後期部署工作執行。
您可以將每個鉤子設為在指定的 Cloud Deploy 執行環境中執行,但如果要部署至 Google Kubernetes Engine,則可以選擇將鉤子設為在部署應用程式的 GKE 叢集中執行。
系統會假設部署掛鉤為冪等。如果特定動作執行多次,就不會產生額外效果。
部署掛鉤的運作方式為何?
以下說明設定部署掛鉤的步驟,以及執行這些掛鉤的 Skaffold 和 Cloud Deploy 程序:
您可以設定特定版本使用的
skaffold.yaml
,以便納入customActions
,藉此識別用於執行鉤子的容器映像檔,以及要在每個容器中執行的特定指令或指令碼。您可以在發布管道進度中的一或多個階段中設定鉤子,每個階段都會參照您在
skaffold.yaml
中設定的customActions
。在推出部署工作執行前,Skaffold 會執行在
skaffold.yaml
中設定的任何指令,這些指令會在管道進度中的predeploy
節中參照。predeploy
鉤子一律會在階段中以第一個工作執行。在推出作業執行完畢後,Cloud Deploy 會執行在
skaffold.yaml
中設定的任何指令,這些指令會在管道進度中的postdeploy
節中參照。
部署掛鉤會在預設 Cloud Deploy 執行環境中執行,或是在指定的替代執行環境中執行。針對 GKE 和 GKE Enterprise 的部署作業,您可以選擇在部署應用程式的同一叢集中執行鉤子。
搭配初期測試部署做法使用部署掛鉤
為初期測試部署設定部署鉤子時,請注意下列幾點:
在提交管道階段中,鉤子設定 (
predeploy
和postdeploy
) 位於strategy.canary.canaryDeployment
或strategy.canary.customCanaryDeployment.phaseConfigs
下方,而非strategy.standard
下方。對於自動化測試群組,
predeploy
鉤子只會在第一階段的部署前執行,而postdeploy
鉤子只會在最後階段 (穩定版) 的部署後執行。
在 Skaffold 中設定動作
在 skaffold.yaml
檔案中,customActions
節具有一或多個 customActions
節,其設定如下:
customActions:
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
在這個 customerActions
節中:
ACTION_NAME
是此動作的名稱。這個名稱可以是任何名稱,但必須在這個
skaffold.yaml
中不重複。這是從在發布管道階段定義的預先部署和後期部署動作參照的名稱。CONTAINER_NAME
是特定容器的名稱。這個名稱可以是任何名稱,但必須在這個
skaffold.yaml
中不重複。IMAGE
是指令執行的容器映像檔名稱。
COMMANDS_TO_RUN
是要在該容器上執行的進入點清單。
"/bin/sh"
是您在這裡指定的一般指令,用於叫用殼層,您可以在該殼層中執行的引數中加入指令。LIST_OF_ARGS
是提供給指令的引數清單。這是以半形逗號分隔的清單,每個引數都以引號括住。如果 COMMAND_TO_RUN 是
"/bin/sh"
,則此處的其中一個引數會是"-c"
,另一個引數則是您要在要叫用的殼層中執行的完整指令。範例如下:
command: ["/bin/sh"] args: ["-c", `echo "This command ran!"`]
如要進一步瞭解 Skaffold 自訂動作,請參閱 Skaffold 說明文件。
設定管道以參照動作
如要完成部署掛鉤設定,請設定提交管道,以便參照您在 skaffold.yaml
檔案中定義的自訂動作。預先部署和後期部署動作會在管道進度中的一個或多個特定階段中設定。
以下是使用 standard
部署策略時,在管道階段中設定預先部署和後期部署掛鉤的方式:
serialPipeline:
stages:
- targetId: hooks-staging
profiles: []
strategy:
standard:
predeploy:
actions: ["PREDEPLOY-ACTION"]
postdeploy:
actions: ["POSTDEPLOY-ACTION"]
在這個 yaml 中:
PREDEPLOY_ACTION
與您在
skaffold.yaml
中使用的 ACTION_NAME 相同,用於定義要在部署前執行的自訂動作。POSTDEPLOY_ACTION
與您在
skaffold.yaml
中使用的 ACTION_NAME 相同,用於定義要在部署後執行的自訂動作。
您可以為 predeploy
和 postdeploy
指定多個動作,並以半形逗號分隔。指定多個動作時,系統會依指定的順序依序執行。工作 (預先部署或後置部署) 在第一個失敗的動作上失敗,且不會執行剩餘的動作。
根據預設,如果您同時執行多個容器,且其中一個工作失敗,系統會停止兩個容器。您可以使用 Skaffold 自訂動作失敗策略設定這項行為。
在應用程式叢集中執行鉤子
根據預設,部署掛鉤會在 Cloud Deploy 執行環境中執行。您也可以設定 Skaffold,在應用程式執行的同一叢集中執行這些自訂動作。在 skaffold.yaml
中設定自訂動作並在管道階段啟用時,系統會自動在目標叢集中執行該動作。
這項功能僅適用於 GKE 和 GKE Enterprise 的部署作業,不適用於 Cloud Run。部署至 Cloud Run 的作業只能在 Cloud Deploy 執行環境中執行鉤子。
如要在叢集中執行鉤子,請在 skaffold.yaml
設定檔的特定自訂動作 customActions
節內加入 executionMode.kubernetesCluster
節:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
executionMode:
kubernetesCluster: {}
以下是包含 executionMode
的 customActions
節,可在應用程式叢集中叫用鉤子容器:
customActions:
- name: predeploy-action
containers:
- name: predeploy-echo
image: ubuntu
command: ["/bin/sh"]
args: ["-c", 'echo "this is a predeploy action"' ]
executionMode:
kubernetesCluster: {}
executionMode
節點為選用項目,如果省略,Skaffold 會在 Cloud Deploy 執行環境中執行自訂動作容器。
可用的環境變數
Cloud Deploy 會在執行環境中提供並填入下列環境變數,供您用於鉤子:
ANTHOS_MEMBERSHIP
如果目標為
ANTHOS
類型,則為 Anthos 會員資格的完整資源名稱。CLOUD_RUN_LOCATION
對於
RUN
類型的目標,則是 Cloud Run 服務部署所在的區域。CLOUD_RUN_PROJECT
如果目標類型為
RUN
,則為建立 Cloud Run 服務的專案。CLOUD_RUN_SERVICE
如果目標為
RUN
類型,則為已部署的 Cloud Run 服務名稱。CLOUD_RUN_SERVICE_URLS
對於
RUN
類型的目標,使用者用來存取服務的網址 (以逗號分隔的清單)。您可以在Google Cloud 控制台的 Cloud Run 服務詳細資料中找到這些資訊。CLOUD_RUN_REVISION
對於
RUN
類型的目標,則是 Cloud Run 服務的特定修訂版本。GKE_CLUSTER
如果目標為
GKE
類型,請提供 Google Kubernetes Engine 叢集的完整資源名稱,例如projects/p/locations/us-central1/clusters/dev
。TARGET_TYPE
目標的特定執行階段類型。
GKE
、ANTHOS
或RUN
其中之一。對於自訂目標,系統不會設定這個值。CLOUD_DEPLOY_LOCATION
包含 Cloud Deploy 資源的區域。
CLOUD_DEPLOY_DELIVERY_PIPELINE
提交管道的 ID。
CLOUD_DEPLOY_TARGET
目標的 ID。
CLOUD_DEPLOY_PROJECT
包含 Cloud Deploy 資源的專案的 Google Cloud 專案編號。
CLOUD_DEPLOY_PROJECT_ID
Google Cloud 專案 ID。
CLOUD_DEPLOY_RELEASE
鉤子將執行的版本 ID。
CLOUD_DEPLOY_ROLLOUT
包含鉤子工作內容的推送 ID。
CLOUD_DEPLOY_JOB_RUN
代表工作目前執行狀態的工作執行程序 ID。
CLOUD_DEPLOY_PHASE
包含鉤子工作內容的部署作業中的階段。
將參數部署為環境變數
除了本節所列的環境變數外,Cloud Deploy 還可將您設定的任何部署參數傳遞至自訂容器。
瞭解詳情。
後續步驟
請試試快速入門:在部署前後執行掛鉤。
進一步瞭解 Skaffold。