将 Cloud Deploy 与您的 CI 系统集成

本文档介绍了如何从持续集成 (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 的注释。当您对版本执行 listget 操作时,系统会返回版本的所有注释,并且注释会随版本一起显示在 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 搭配使用