本文說明如何驗證 Cloud Deploy 部署作業。
您可以設定 Cloud Deploy,確認部署至任何目標的應用程式是否正常運作。驗證作業會使用您自己的測試映像檔,並設定 Cloud Deploy 在部署完成後執行這些測試。
部署驗證的運作方式
應用程式部署完成後,Cloud Deploy 會在 Cloud Deploy 執行環境中執行驗證工作。
執行的測試是否成功,代表驗證是否成功:
驗證是否成功取決於容器產生的結束代碼。
0表示成功。如果結束代碼不是零,表示失敗。如要產生預期的驗證結果,請確保容器以適當的結束代碼結束。如果驗證程序執行了多個容器,所有容器都必須成功執行,驗證才會成功。如果驗證失敗,推出作業也會失敗。
如果驗證期間部署失敗,您可以檢查推出作業來查看:

-
您也可以終止正在進行的驗證工作。
驗證所用的元件
rollout 資源包含下列物件,可支援部署驗證:
階段
推出作業中邏輯上歸為一組的作業 (工作) 集合,例如部署或部署及驗證。
工作
要在推出作業中執行的特定作業,例如部署或驗證。
工作執行作業
工作執行是推出資源的子項,也是工作的執行個體,例如部署嘗試。
如要進一步瞭解 Cloud Deploy 資源,請參閱 Cloud Deploy 服務架構
設定 Cloud Deploy 進行部署作業驗證
如要為 Cloud Deploy 目標啟用部署驗證,請在推送管道進度中,為指定目標 (或多個目標) 新增 verify 節,如下列範例所示:
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-demo-app
description: main application pipeline
serialPipeline:
stages:
- targetId: dev
profiles: []
strategy:
standard:
verify:
tasks:
- type: container
image: "VERIFY_IMAGE"
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
env: {VERIFY_TASK_ENV_MAP}
在這個 YAML 中:
VERIFY_IMAGE
這是要為驗證工作執行的映像檔名稱。例如:
us-central1-docker.pkg.dev/gcp-project-id-12345/my-repository/my-app:v1.2適用於 Artifact Registry 映像檔。COMMANDS_TO_RUN
這是要在該容器上執行的進入點清單。
"/bin/sh"是在這裡指定以叫用殼層的典型指令。LIST_OF_ARGS
這是要提供給指令的引數清單。這是以半形逗號分隔的清單,每個引數都以引號括住。如果 COMMAND_TO_RUN 是
"/bin/sh",則其中一個引數會是"-c",另一個引數則是在您叫用的殼層中執行的整個指令。範例如下:
command: ["/bin/sh"] args: ["-c", `echo "This command ran!"`]VERIFY_TASK_ENV_MAP
這是傳遞至容器的環境變數對應,格式為
KEY:VAL。
驗證作業會在自己的執行環境中執行。這個執行環境的設定方式與 RENDER 和 DEPLOY 相同。VERIFY
在應用程式叢集上執行驗證
根據預設,部署作業驗證會在 Cloud Deploy 執行環境中執行。您也可以設定 Skaffold,在應用程式執行的同一叢集上執行驗證。
如要在叢集上執行驗證容器,您必須在 skaffold.yaml 的 verify 節中設定驗證容器。針對定義的每個容器,您也必須設定 executionMode.kubernetesCluster。
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
以下是驗證節的範例,其中包含 executionMode,可在應用程式叢集上叫用驗證容器:
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
此外,您必須在傳送管道設定中,將 verify 節設為 true。
以下是傳送管道定義範例,其中 dev 目標已啟用驗證。
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-demo-app
description: main application pipeline
serialPipeline:
stages:
- targetId: dev
profiles: []
strategy:
standard:
verify: true
這項功能僅適用於 GKE 部署作業,不適用於 Cloud Run。部署至 Cloud Run 時,只能在 Cloud Deploy 執行環境中執行驗證。
如果是平行部署,驗證作業會在多重目標上設定,驗證容器則會在每個子目標上執行。
您也可以在 kubernetesCluster 下方加入 jobManifestPath 和 overrides 屬性,指向驗證容器的資訊清單,以及要覆寫的任何值。(overrides 採用 Kubernetes 內嵌 JSON,並以您要替換的值取代。)瞭解詳情。
executionMode 節是選用項目,如果省略,Skaffold 會在 Cloud Deploy 執行環境中執行驗證容器。
重新嘗試驗證
如果驗證作業失敗,您可以重試驗證,建立新的作業執行:
gcloud deploy rollouts retry-job ROLLOUT_NAME \
--job-id=JOB_ID \
--phase-id=PHASE_ID \
--delivery-pipeline=PIPELINE_NAME \
--release=RELEASE_NAME \
--region=REGION
重試驗證會將推出更新的狀態從「FAILED」變更為「IN_PROGRESS」。
只有在推出作業的驗證工作失敗時,才能重試驗證。
可用的環境變數
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 服務後,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要執行 Hook 的發布版本 ID。
CLOUD_DEPLOY_ROLLOUT包含掛鉤作業的推出作業 ID。
CLOUD_DEPLOY_JOB_RUN工作執行的 ID,代表目前執行的工作。
CLOUD_DEPLOY_PHASE推出作業中的階段,包含部署掛鉤、驗證工作或自訂轉譯/部署的工作。
後續步驟
- 進一步瞭解工作
- 嘗試快速入門導覽課程:驗證部署作業