本文档介绍了如何验证 Cloud Deploy 部署。
您可以配置 Cloud Deploy,以验证已部署到任何目标的应用是否正常运行。验证使用您自己的测试映像完成,并且您配置 Cloud Deploy 在部署完成后运行这些测试。
部署验证的运作方式
应用部署完毕后,Cloud Deploy 会在 Cloud Deploy 执行环境中运行验证任务。
所执行测试的成功或失败表示验证的成功或失败:
验证是否成功取决于容器生成的退出代码。
0表示成功。非零退出代码表示失败。为生成预期的验证结果,请确保容器以适当的退出代码退出。如果作为验证的一部分执行了多个容器,则所有容器都必须成功执行,验证才能成功。如果验证失败,推出也会失败。
如果部署在验证期间失败,您可以通过检查发布情况来发现这一点:

-
您还可以终止正在进行的验证作业。
用于验证的组件
rollout 资源包含以下对象,这些对象支持部署验证:
阶段
发布中在逻辑上分组在一起的一系列操作(作业),例如部署或部署并验证。
作业
要对发布执行的具体操作,例如部署或验证。
作业运行
作为发布资源的子级,作业运行是作业的一个实例,例如部署尝试。
如需详细了解 Cloud Deploy 资源,请参阅 Cloud Deploy 服务架构
配置 Cloud Deploy 以进行部署验证
为 Cloud Deploy 目标启用部署验证包括在交付流水线进度中向给定目标(或多个目标)添加 verify stanza,如以下示例所示:
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"是此处要指定的典型命令,用于调用 shell。LIST_OF_ARGS
是要提供给命令的实参列表。这是一个以英文逗号分隔的列表,每个实参都用英文引号括起来。如果您的 COMMAND_TO_RUN 为
"/bin/sh",则此处的某个实参将为"-c",而另一个实参将为您要在调用的 shell 中运行的整个命令。示例如下:
command: ["/bin/sh"] args: ["-c", `echo "This command ran!"`]VERIFY_TASK_ENV_MAP
是以
KEY:VAL格式传递到容器中的环境变量的映射。
验证操作在其自己的执行环境中执行。此执行环境可针对 VERIFY 进行配置,就像针对 RENDER 和 DEPLOY 进行配置一样。
在应用集群上运行验证
默认情况下,部署验证在 Cloud Deploy 执行环境中运行。您还可以配置 Skaffold,以在应用运行的同一集群上运行验证。
如需在集群上运行验证容器,您必须在 skaffold.yaml 的 verify stanza 下配置验证容器。对于定义的每个容器,您还必须设置 executionMode.kubernetesCluster。
verify:
- name:
container:
name:
image:
command:
args:
executionMode:
kubernetesCluster:
以下是一个验证 stanza 示例,其中包含 executionMode 以在应用集群上调用验证容器:
verify:
- name: integration-test-container
container:
name: integration-test-container
image: integration-test-container
executionMode:
kubernetesCluster: {}
此外,您还必须在交付流水线配置中将 verify stanza 设置为 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 stanza 是可选的,如果您省略它,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 会生成这些网址。因此,此环境变量仅在 postdeploy 钩子和验证作业中可用。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钩子将运行的版本对应的 ID。
CLOUD_DEPLOY_ROLLOUT包含钩子作业的发布版本的 ID。
CLOUD_DEPLOY_JOB_RUN表示当前作业执行的作业运行的 ID。
CLOUD_DEPLOY_PHASE发布中的阶段,包含部署钩子、验证作业或自定义渲染/部署的作业。