验证您的部署

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

本文档介绍了如何验证 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 节。

验证操作在其自己的执行环境中执行。可以针对 VERIFY 配置此执行环境,方式与为 RENDERDEPLOY 配置相同。

配置 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,其中标识了要使用的容器,以及要在该容器中运行的测试脚本。此示例中的 $ENDPOINT_URL 只是应用网址的占位符,而不是可用的 Google 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

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

可用的环境变量

Google Cloud Deploy 在 VERIFY 执行环境中提供并填充以下环境变量,您可以使用这些环境变量进行测试:

  • 定位类型

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

  • GKE 集群

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

  • ANTHOS 会员

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

  • CLOUD_RUN_LOCATION

    对于 RUN 类型的目标,系统会部署 Cloud Run 服务所在的区域。

  • CLOUD_RUN_PROJECT

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

  • CLOUD_RUN_SERVICE_网址S

    对于 RUN 类型的目标,最终用户将用于访问您的服务的网址。(以英文逗号分隔的列表)。您可以在 Google Cloud 控制台中的 Cloud Run 服务详细信息中找到这些依赖项。