本文档介绍了如何从持续集成 (CI) 系统调用 Cloud Deploy 交付流水线。
将 Cloud Deploy 与 CI 系统集成非常简单,只需添加对 Cloud Deploy gcloud
CLI 的调用即可。此调用发生在 CI 流水线中可以部署应用的时间点。
准备工作
本页面中的说明假定您已满足以下条件:
从 CI 流水线调用 Cloud Deploy
以下命令会创建一个新版本,从而调用交付流水线实例:
gcloud deploy releases create RELEASE_NAME \
--delivery-pipeline=PIPELINE_NAME \
--region=REGION \
--annotations=[KEY=VALUE,...] \
--images=[IMAGE_LIST]
其中...
RELEASE_NAME
是您为此版本指定的名称。必须提供此值。
您可以通过添加
'$DATE'
和/或'$TIME'
来指定动态版本名称。例如,如果您在世界协调时间下午 3:07 调用此命令,'rel-$TIME'
会解析为rel-1507
。'$DATE'
和'$TIME'
必须用单引号括起来。PIPELINE_NAME
是已注册的交付流水线的名称。必须提供此值。
REGION
是您要在其中创建此版本的区域。该区域不需要与您最终部署应用的区域相同。
[KEY=VALUE,...]
是要应用到版本的一个或多个注释的可选列表,采用键值对的形式。
您可以使用注释来跟踪版来源,例如通过传递类似于
commitId=0065ca0
的注释。当您对版本执行list
或get
操作时,系统会返回版本的所有注释,并且注释会随版本一起显示在 Google Cloud 控制台中,因此您也可以在此处查看版本来源。[IMAGE_LIST]
是一个以英文逗号分隔的映像名称到映像路径替换列表。例如:
--images=image1=path/to/image1:v1@sha256:45db24,image2=path/to/image2:v1@sha256:55xy18
。如果您传递
--build-artifacts
(它用于标识 Skaffold 构建工件输出文件),则不需要此值。当 Cloud Deploy 渲染清单时,未渲染清单中的映像名称在已渲染清单中替换为完整映像引用。也就是说,在此示例中,
image1
位于未渲染清单中,并在已渲染清单中替换为path/to/image1:v1@sha256:45db24
。
使用直接映像引用的示例
以下命令创建一个新版本,直接传递映像引用,而不是构建工件文件:
gcloud deploy releases create my-release \
--delivery-pipeline=web-app \
--region=us-central1 \
--images=image1=path/to/image1:v1@sha256:45db24
在此示例中,my-release
是版本名称。如果您想根据日期或时间生成版本名称,可以添加 '$DATE'
或 'TIME'
,也可以同时添加这两个参数。时间是您调用该命令的机器上的世界协调时间 (UTC)。'$DATE'
和 '$TIME'
必须用单引号括起来。
示例如下:
gcloud deploy releases create rel-'$DATE'-'$TIME' \
--delivery-pipeline=web-app \
--region=us-central1 \
--images=image1=path/to/image1:v1@sha256:45db24
在此示例中,该命令会生成一个带有前缀 rel-
以及日期和时间的版本名称,例如:rel-20220131-1507
。
在版本名称中使用 Git SHA 也是常见的做法。请参阅本文档中的 Cloud Build 和 Docker 示例。
构建工件与映像
在 gcloud deploy releases create
命令上,您可以传递一组映像引用或构建工件文件引用。
使用
--images=[NAME=TAG,...]
来引用一个或多个单独的容器映像。此值是对单个映像名称的集合到映像完整路径替换的引用。以下是一个示例:
gcloud deploy releases create my-release --images=image1=path/to/image1:v1@sha256:45db24
使用
--build-artifacts=
以指向 Skaffold 构建工件输出文件。
Cloud Build 示例 - 传递构建工件文件
Docker 构建示例
以下 YAML 文件演示了用于 Docker 构建映像推送的 Cloud Build,并最终创建了一个 Cloud Deploy 版本。
此示例构建映像并将其推送到工件代码库,并构建命令以创建发布,其发布名称基于短提交 SHA。此示例必须用作 Cloud Build SCM 触发器,因为它依赖于 $COMMIT_SHA
变量。
此示例将映像推送到与源代码库的提交哈希值相同的 Docker 标记。然后,从发布命令参数中引用与 Docker 标记相同的提交哈希值。
steps:
# Build and tag using commit sha
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '.', '-t', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}', '-f', 'Dockerfile']
# Push the container image
- name: 'gcr.io/cloud-builders/docker'
args: ['push', 'REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}']
# Create release in Google Cloud Deploy
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
entrypoint: gcloud
args:
[
"deploy", "releases", "create", "rel-${SHORT_SHA}",
"--delivery-pipeline", "PIPELINE_NAME",
"--region", "us-central1",
"--annotations", "commitId=${REVISION_ID}",
"--images", "IMAGE_NAME=REPO_LOCATION/$PROJECT_ID/IMAGE_NAME:${COMMIT_SHA}"
]
请注意,此示例末尾的映像名称 "--images", "IMAGE_NAME=
在已渲染清单中替换为完整映像引用。
使用 Skaffold 的示例 Cloud Build 配置
以下 YAML 文件是 Cloud Build build 配置的内容,其中包括调用 Cloud Deploy 来创建版本,并含有基于日期的版本名称。此示例还展示了用于构建的 Skaffold。
steps:
- name: gcr.io/k8s-skaffold/skaffold
args:
- skaffold
- build
- '--interactive=false'
- '--file-output=/workspace/artifacts.json'
- name: gcr.io/google.com/cloudsdktool/cloud-sdk
entrypoint: gcloud
args:
[
"deploy", "releases", "create", "rel-${SHORT_SHA}",
"--delivery-pipeline", "PIPELINE_NAME",
"--region", "us-central1",
"--annotations", "commitId=${REVISION_ID}",
"--build-artifacts", "/workspace/artifacts.json"
]
将 GitHub Actions 连接到 Cloud Deploy
如果您使用 GitHub Actions 进行持续集成或其他与软件交付相关的活动,则可以使用 create-cloud-deploy-release
GitHub Action 连接到 Cloud Deploy 以实现持续交付。
将 GitLab 连接到 Cloud Deploy
如果您使用 GitLab 进行持续集成,则可以使用 GitLab Cloud Deploy 组件 create-cloud-deploy-release 创建 Cloud Deploy 版本。
您还可以尝试端到端教程,了解如何将 GitLab 与 Google Cloud 搭配使用。
使用注释来跟踪版本的来源
通过 --annotations=
标志,您可以将一个或多个任意键值对应用于此命令创建的版本。您可以将此标志添加到 gcloud deploy releases create
命令。
例如,您可以使用以下键值对来跟踪要部署的映像的来源。
以下是一个示例:
gcloud deploy releases create web-app-1029rel \
--delivery-pipeline=web-app \
--region=us-central1 \
--annotations=commitId=0065ca0,author=user@company.com \
--images=image1=path/to/image1:v1@sha256:45db24
例如,您还可以创建其值是指向拉取请求的网址的注释。如需了解详情,请参阅将标签和注释与 Cloud Deploy 搭配使用。