验证您的部署

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

本文档介绍了如何验证 Google Cloud Deploy 部署。

您可以配置 Google Cloud Deploy 和 Skaffold,以验证您部署到任何目标的应用是否正常运行。验证使用自己的测试映像完成,并且您将 Google Cloud Deploy 和 Skaffold 配置为在部署完成后运行这些测试。

部署验证的工作原理是什么?

  1. 您可以配置 Skaffold 进行验证。

    此配置可识别用于运行测试的一个或多个容器映像,以及要从该容器映像运行的特定命令(例如脚本)。

  2. 您可以在交付流水线中配置一个或多个目标,以进行部署验证。

    此配置会为该目标启用验证。

  3. 部署发布后 (skaffold apply),Google Cloud Deploy 会在自己的执行环境中运行 skaffold verify 命令。

  4. Skaffold 会调用 skaffold.yamlverify 节中指定的一个或多个测试,以针对已部署的应用运行。

  5. 如果任何测试失败,验证将失败。

    • 由于验证失败,发布也失败了。

    • 如果部署在验证期间失败,您可以通过检查发布作业来查看此问题:

      Google Cloud 控制台中的发布详情,包括验证状态

  6. 您可以重试失败的验证

用于验证的组件

rollout 资源包括以下支持部署验证的对象:

  • 阶段

    发布时以逻辑方式组合在一起的操作(作业)的集合,例如部署或部署和验证。

  • Job

    要在发布时执行的具体操作,例如部署或验证。

  • 作业运行

    作业运行是发布资源的子级,是作业的实例,例如尝试部署。

如需详细了解 Google Cloud Deploy 资源,请参阅 Google Cloud Deploy 服务架构

部署验证生成的通知

Google Cloud Deploy 会生成 Pub/Sub 消息,并针对以下事件发布这些消息:

  • 作业运行创建、更新和删除

    这些通知会发布到 clouddeploy-resources 主题,并包含以下属性:

    • Resource
    • ResourceType (JobRun)
    • ActionCreateUpdateDelete
    • ProjectNumber
    • Location
    • TargetId
    • DeliveryPipelineId
    • ReleaseId
    • RolloutId
    • JobRunId

以下是发布到 clouddeploy-resources 主题的作业运行创建的示例 Pub/Sub 消息:

{
    "ackId": "UAYWLF1GSFE3GQhoUQ5PXiM_NSAoRRAGAE8CKF15MFcrQVh9Dz4NGXJ9YXRiWRIJBkUHeF9cEQ1iXE5EB0nq0KDVV1dKXxYGAExQeVhbHQVoWVh0Bnn7h5nK-8HjYwk9OqKarPdtO4PY2fNHZiI9XhJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FU0Q",
    "message": {
      "attributes": {
        "Action": "Create",
        "DeliveryPipelineId": "dv-pipeline",
        "JobRunId": "634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
        "Location": "us-central1",
        "ProjectNumber": "253401481285",
        "ReleaseId": "test-release-100",
        "Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-100/rollouts/test-release-100-to-dev-0001/jobRuns/634f8c6f-30c3-49ca-af80-68dc24d4cc5d",
        "ResourceType": "JobRun",
        "RolloutId": "test-release-100-to-dev-0001"
      },
      "messageId": "5572937706805411",
      "publishTime": "2022-09-07T14:00:46.040Z"
    }
  },
  • 作业运行开始、成功和失败

    这些通知会发布到 clouddeploy-operations 主题,并包含以下属性:

    • Resource
    • ResourceType (JobRun)
    • ActionStartSucceedFailure
    • ProjectNumber
    • Location
    • TargetId
    • DeliveryPipelineId
    • ReleaseId
    • RolloutId
    • JobRunId
    • PhaseId
    • JobId
    • JobTypeDeployVerify

以下是发布到 clouddeploy-operations 主题的失败作业的示例 Pub/Sub 消息:

{
    "ackId": "RFAGFixdRkhRNxkIaFEOT14jPzUgKEUUBAgUBXx9cEFPdVhec2hRDRlyfWB9aVsbCAUXU3cJURsHaE5tdR-6xcvaS0NVb18UAgRFWndfXhMEblhfcy-fkK3HwvT9U0AvOemNgdZpe6jHiulvZiM9XxJLLD5-My5FQV5AEkw4G0RJUytDCypYEU4EISE-MD5FUw",
    "message": {
      "attributes": {
        "Action": "Failure",
        "DeliveryPipelineId": "dv-pipeline",
        "JobId": "verify",
        "JobRunId": "b389224a-c259-4a00-ab75-c22e48bc3136",
        "JobType": "Verify",
        "Location": "us-central1",
        "PhaseId": "stable",
        "ProjectNumber": "253401481285",
        "ReleaseId": "test-release-101",
        "Resource": "projects/253401481285/locations/us-central1/deliveryPipelines/dv-pipeline/releases/test-release-101/rollouts/test-release-101-to-dev-0001/jobRuns/b389224a-c259-4a00-ab75-c22e48bc3136",
        "ResourceType": "JobRun",
        "RolloutId": "test-release-101-to-dev-0001",
        "TargetId": "dev"
      },
      "messageId": "5573609905896436",
      "publishTime": "2022-09-07T15:35:37.906Z"
    }
  },

配置 Google Cloud Deploy 以进行部署验证

为 Google Cloud Deploy 目标启用部署验证包括在传送流水线进度中将 verify: true 属性添加到一个或多个给定目标,如以下示例所示:

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
 - targetId: prod
   profiles: []
   strategy:
     standard:
       verify: false

在此配置中,在 dev 目标上启用了部署验证,但在 prod 目标上未启用。请注意,verify: false 等同于省略 verify 属性或整个 strategy 节。

验证操作在其自己的执行环境中执行。可以像为 RENDERDEPLOY 配置此执行环境一样为 VERIFY 配置此执行环境。

配置 Skaffold 以进行部署验证

如需为目标启用部署验证,您需要在部署的 skaffold.yaml 配置文件中使用 verify 节。如果您为每个目标使用单独的配置文件,这可以用于特定的 Skaffold 配置文件。

verify 节用于标识运行验证所需的容器,例如集成测试。

以下是包含 verify 节的 skaffold.yaml 示例:

apiVersion: skaffold/v3alpha1
kind: Config
build:
  artifacts:
    - image: integration-test
      context: integration-test
manifests:
  rawYaml:
  - kubernetes.yaml
deploy:
  kubectl: {}
verify:
- name: verify-integration-test
  container:
    name: integration-test
    image: integration-test
    command: ["./test-systems.sh"]
- name: verify-endpoint-test
  container:
    name: alpine
    image: alpine
    command: ["/bin/sh"]
    args: ["-c", "wget $ENDPOINT_URL"]

这个简单的示例展示了 verify,用于标识要使用的容器以及在该容器中运行的测试脚本。

重新尝试验证

当验证作业失败时,您可以重新尝试验证,以创建新的作业运行:

gcloud alpha 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

您只能对验证作业失败的发布重试验证。

可用的环境变量

Google Cloud Deploy 在 VERIFY 执行环境中提供并填充以下环境变量,以用于测试:

  • 定位类型

    目标的特定运行时类型。GKEANTHOSRUN

  • GKE_集群

    对于 GKE 类型的目标,这是 Google Kubernetes Engine 集群的完全指定的资源名称,例如 projects/p/locations/us-central1/clusters/dev

  • ANTHOS_MEMBERSHIP

    对于类型为 ANTHOS 的目标,这是 Anthos 成员资格的完全指定的资源名称。

  • CLOUD_RUN_LOCATION

    对于 RUN 类型的目标,部署 Cloud Run 服务的区域。

  • CLOUD_RUN_PROJECT

    对于 RUN 类型的目标,即创建 Cloud Run 服务的项目。