验证您的部署

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

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

默认情况下,部署验证会在 Cloud Deploy 执行环境中运行,但您也可以将其配置为在应用运行的同一集群上运行

部署验证的工作原理

  1. 配置 Skaffold 以进行验证。

    此配置用于指定用于运行测试的容器映像,以及从该容器映像运行的特定命令(例如脚本)。

  2. 在广告投放中配置一个或多个目标 用于部署验证的流水线。

    此配置会启用对部署到该目标的工作负载的验证。

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

    对于部署到 Google Kubernetes Engine 和 GKE Enterprise 的情况,您可以选择在运行应用容器的同一集群上运行验证容器。

  4. Skaffold 会调用 skaffold.yamlverify 诗节中指定的测试,以便对部署的应用运行测试。

  5. 所执行测试成功或失败表示验证成功或失败。

    • 验证成功与否取决于所执行的容器的退出代码。

      0 表示成功。非零退出代码表示失败。要生成 验证所需的验证结果,请确保容器退出并显示 相应的退出代码。如果在验证过程中执行多个容器,则所有容器都必须成功,验证才能成功。

    • 如果验证失败,发布也会失败。

    • 如果部署在验证期间失败,您可以通过检查发布情况来了解:

      Google Cloud 控制台中关于发布的详细信息,包括验证状态

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

    您还可以 终止 进行中的验证作业。

用于验证的组件

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

  • 阶段

    发布中按逻辑分组的操作(作业)集合 例如部署或部署和验证。

  • 作业

    对发布版本要执行的具体操作,例如部署或验证。

  • 作业运行

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

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

部署验证生成的通知

Cloud Deploy 生成 Pub/Sub 消息并将其发布 事件:

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

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

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

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

{
    "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"
    }
  },

配置 Cloud Deploy 以进行部署验证

为 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 以进行部署验证

为目标启用部署验证需要在以下位置包含 verify 节 用于部署的 skaffold.yaml 配置文件。如果您为每个目标使用单独的 Skaffold 配置文件,则此配置可以针对特定 Skaffold 配置文件。

verify 节标识要运行以执行验证的容器: 例如集成测试

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

apiVersion: skaffold/v4beta7
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 只是应用网址的占位符,而非可用的 Cloud Deploy 环境变量。

在应用集群上运行验证容器

默认情况下,部署验证在 Cloud Deploy 中运行 执行环境。您还可以配置 Skaffold,以便在应用运行的同一集群上运行验证容器。当您在 skaffold.yaml 并启用验证,则验证会自动在该目标的集群中运行。

此功能仅适用于部署到 GKE 和 GKE Enterprise 的应用,不适用于 Cloud Run。部署到 Cloud Run 的应用只能在 Cloud Deploy 执行环境中运行验证。

集群内验证需要 Skaffold 2.3 或更高版本

要在集群上运行验证容器,请添加 skaffold.yaml 配置中的 executionMode.kubernetesCluster 节 文件,放在特定验证容器的 verify 节中:

verify:
- name: 
  container:
    name: 
    image: 
    command: 
    args: 
  executionMode:
    kubernetesCluster:

以下是包含 executionMode 以在应用集群上调用验证容器的示例 verify 诗节:

verify:
- name: integration-test-container
  container:
    name: integration-test-container
    image: integration-test-container
  executionMode:
    kubernetesCluster: {}

executionMode 节是可选的,如果省略,Skaffold 会运行 验证容器。

重新尝试验证

如果验证作业失败,您可以重试验证,创建新的作业运行作业:

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 提供并填充以下环境 VERIFY 执行环境中的变量, 您可以用它来进行测试:

  • ANTHOS_MEMBERSHIP

    对于 ANTHOS 类型的目标,Anthos 的完整资源名称 会员资格。

  • CLOUD_RUN_LOCATION

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

  • CLOUD_RUN_PROJECT

    对于 RUN 类型的目标,Cloud Run 将 服务。

  • CLOUD_RUN_SERVICE

    对于 RUN 类型的目标,已部署的已部署实例的完整资源名称 Cloud Run 服务,例如 projects/p/locations/us-central1/services/dev

  • CLOUD_RUN_SERVICE_URLS

    对于 RUN 类型的目标,是指以 用户用来访问您的服务的信息。您可以在 服务的 Cloud Run 服务详情(位于 Google Cloud 控制台。

  • 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_DELIVERY_PIPELINE

    执行环境正在运行的 ID 交付流水线。

  • CLOUD_DEPLOY_TARGET

    正在运行的执行环境的目标 ID。

  • CLOUD_DEPLOY_PROJECT

    运行执行环境的 Google Cloud 项目的编号。

  • CLOUD_DEPLOY_RELEASE

    将在其中运行验证的版本 ID。

  • CLOUD_DEPLOY_ROLLOUT

    包含要验证的作业的发布版本的 ID。

  • CLOUD_DEPLOY_JOB_RUN

    作业运行的 ID,表示 作业。

  • CLOUD_DEPLOY_PHASE

    发布中的阶段,其中包含要验证的作业。

将参数部署为环境变量

除了本部分列出的环境变量之外, Cloud Deploy 可以将任何 您设置的部署参数

了解详情