驗證部署作業

本文說明如何驗證 Cloud Deploy 部署作業。

您可以設定 Cloud Deploy,確認部署至任何目標的應用程式是否正常運作。驗證作業會使用您自己的測試映像檔,並設定 Cloud Deploy 在部署完成後執行這些測試。

部署驗證的運作方式

  1. 您可以在發布管道中設定一或多個目標,並定義要執行的工作,以驗證部署作業。

  2. 應用程式部署完成後,Cloud Deploy 會在 Cloud Deploy 執行環境中執行驗證工作。

    執行的測試是否成功,代表驗證是否成功:

    • 驗證是否成功取決於容器產生的結束代碼。

      0 表示成功。如果結束代碼不是零,表示失敗。如要產生預期的驗證結果,請確保容器以適當的結束代碼結束。如果驗證程序執行了多個容器,所有容器都必須成功執行,驗證才會成功。

    • 如果驗證失敗,推出作業也會失敗。

    • 如果驗證期間部署失敗,您可以檢查推出作業來查看:

       Google Cloud 控制台中的推出詳細資料,包括驗證狀態

  3. 您可以忽略重試驗證失敗的項目。

    您也可以終止正在進行的驗證工作。

驗證所用的元件

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

驗證作業會在自己的執行環境中執行。這個執行環境的設定方式與 RENDERDEPLOY 相同。VERIFY

在應用程式叢集上執行驗證

根據預設,部署作業驗證會在 Cloud Deploy 執行環境中執行。您也可以設定 Skaffold,在應用程式執行的同一叢集上執行驗證。

如要在叢集上執行驗證容器,您必須在 skaffold.yamlverify 節中設定驗證容器。針對定義的每個容器,您也必須設定 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 下方加入 jobManifestPathoverrides 屬性,指向驗證容器的資訊清單,以及要覆寫的任何值。(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

    目標的特定執行階段類型。GKEANTHOSRUN。 如果是自訂目標,則不會設定這項屬性。

  • 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

    推出作業中的階段,包含部署掛鉤、驗證工作或自訂轉譯/部署的工作。

後續步驟