本文档介绍了如何验证 Google Cloud Deploy 部署。
您可以配置 Google Cloud Deploy 和 Skaffold,以验证已部署到任何目标的应用是否正常工作。使用您自己的测试映像进行验证,并将 Google Cloud Deploy 和 Skaffold 配置为在部署完成后运行这些测试。
部署验证的工作原理是什么?
您可以配置 Skaffold 以进行验证。
此配置可标识用于运行测试的一个或多个容器映像,以及要从该容器映像运行的特定命令(例如脚本)。
您可以在交付流水线中配置一个或多个目标,以进行部署验证。
此配置会启用针对该目标的验证。
部署发布 (
skaffold apply
) 后,Google Cloud Deploy 会在其自己的执行环境中运行skaffold verify
命令。Skaffold 会调用
skaffold.yaml
的verify
节中指定的一个或多个测试,以针对已部署的应用运行。如果有任何测试失败,验证将会失败。
由于验证失败,发布也失败了。
如果部署在验证期间失败,您可以通过检查发布作业来查看此问题:
您可以重试失败的验证。
用于验证的组件
rollout 资源包含以下支持部署验证的对象:
阶段
发布中以逻辑方式组合在一起的操作(作业)的集合,例如部署或部署并验证。
Job
要在发布时执行的特定操作,例如部署或验证。
作业运行
作业运行是发布资源的子项,是作业的实例,例如尝试部署。
如需详细了解 Google Cloud Deploy 资源,请参阅 Google Cloud Deploy 服务架构
部署验证生成的通知
Google Cloud Deploy 会生成 Pub/Sub 消息,并针对以下事件发布这些消息:
作业运行创建、更新和删除
这些通知会发布到
clouddeploy-resources
主题,并包含以下特性:Resource
ResourceType
(JobRun
)Action
(Create
、Update
、Delete
)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
)Action
(Start
、Succeed
、Failure
)ProjectNumber
Location
TargetId
DeliveryPipelineId
ReleaseId
RolloutId
JobRunId
PhaseId
JobId
JobType
(Deploy
或Verify
)
以下是运行失败的作业(发布到 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
配置此执行环境,方式与为 RENDER
和 DEPLOY
配置相同。
配置 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
执行环境中提供并填充以下环境变量,您可以使用这些环境变量进行测试:
定位类型
目标的特定运行时类型。
GKE
、ANTHOS
或RUN
。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 服务详细信息中找到这些依赖项。