使用 Cloud Build 从 Git 代码库部署工作流

您可以使用 Cloud Build 触发器自动启动构建并从 Git 代码库部署工作流。您可以将触发器配置为在源代码库发生任何更改时部署工作流,也可以仅在更改符合特定条件时部署工作流。

这种方法有助于您管理部署生命周期。例如,您可以在预演环境中部署对工作流的更改,针对该环境运行测试,然后逐步将这些更改发布到生产环境。

准备工作

这些说明假定您在 Google Cloud 项目中拥有 Cloud Build Editor 角色 (roles/cloudbuild.builds.editor),以便您可以创建触发器。您还需要在 GitHub 或 Bitbucket 等源代码库中设置工作流。

控制台

  1. 启用 Cloud Build 和 Workflows API。

    启用 API

  2. 向 Cloud Build 服务账号授予 Workflows Admin 角色 (roles/workflows.admin):

    1. 在 Google Cloud 控制台中,转到 IAM 页面。

      进入 IAM

    2. 选择您的项目。

    3. 在 Cloud Build 服务账号 (PROJECT_NUMBER@cloudbuild.gserviceaccount.com) 对应的行中,点击 修改主账号

    4. 点击添加其他角色

    5. 角色列表中,选择 Workflows Admin 角色。

    6. 点击保存

  3. 将 Compute Engine 默认服务账号的 Service Account User 角色 (roles/iam.serviceAccountUser) 授予 Cloud Build 服务账号。启用 Compute Engine API 后,Compute Engine 默认服务账号为 PROJECT_NUMBER-compute@developer.gserviceaccount.com

    1. 在 Google Cloud 控制台中,转到服务账号页面。

      转到“服务账号”

    2. 选择您的项目。

    3. 点击 Compute Engine 默认服务账号 (PROJECT_NUMBER-compute@developer.gserviceaccount.com) 的电子邮件地址。

    4. 点击权限标签页。

    5. 点击 授予访问权限按钮。

    6. 如需添加新的主账号,请输入您的服务账号的电子邮件地址 (SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com).

    7. 选择角色列表中,依次选择服务账号 > Service Account User 角色。

    8. 点击保存

gcloud

  1. 启用 Cloud Build API 和 Workflows API。

    gcloud services enable cloudbuild.googleapis.com \
      workflows.googleapis.com
    
  2. 向 Cloud Build 服务账号授予 Workflows Admin 角色 (roles/workflows.admin):

    PROJECT_NUMBER=$(gcloud projects describe PROJECT_ID --format='value(projectNumber)')
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/workflows.admin
    

    PROJECT_ID 替换为您的 Google Cloud 项目的 ID。

  3. 授予 Service Account User 角色 针对 Compute Engine 默认服务执行的 (roles/iam.serviceAccountUser) 关联到 Cloud Build 服务账号启用 Compute Engine API 后,Compute Engine 默认服务账号为 PROJECT_NUMBER-compute@developer.gserviceaccount.com

    gcloud iam service-accounts add-iam-policy-binding \
      $PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
      --role=roles/iam.serviceAccountUser
    

连接到源代码库

您必须将 Cloud Build 连接到源代码库, Cloud Build 可以自动执行构建,以响应发生的事件 存储库中

如需连接到 GitHub 或 Bitbucket,请完成以下步骤:

  1. 在 Google Cloud 控制台中,前往 Cloud Build 触发器页面:

    前往“触发器”

  2. 如有必要,选择您的项目,然后点击 Open

  3. 区域列表中,选择要创建触发器的区域。

  4. 点击连接代码库

  5. 选择您已在其中存储源代码的源代码库。

    例如:GitHub(Cloud Build GitHub 应用)

  6. 点击继续

  7. 使用您的用户名和密码向您的源代码库进行身份验证。

    如果您要登录 GitHub,系统会要求您授权 Google Cloud Build GitHub 应用访问您的 GitHub 账号,以便继续操作。

  8. 从可用代码库列表中,选择所需的代码库,然后点击确定

    对于 GitHub 和 Bitbucket 等外部代码库,您必须 拥有 Google Cloud 项目的所有者级权限。 。

  9. 阅读免责声明并选中旁边的复选框,以表示您同意相关条款。

  10. 点击连接

  11. 如需继续创建构建触发器,以便对代码库中的源代码进行自动构建,请点击创建触发器。否则,请点击完成

创建 Cloud Build 配置文件

构建配置文件定义使用构建触发器启动构建时所需的字段。在项目根目录中创建配置文件 目录,然后使用 YAML 或 JSON 编写

例如,以下配置文件会部署和运行测试工作流,然后使用脚本检查输出。如果测试通过,工作流程 部署:

steps:
# Deploy the test workflow with the commit sha
- id: 'deploy-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'deploy', '$_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA', '--source', 'gitops/workflow.yaml']

# Run the test workflow and capture the output
- id: 'run-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['-c', 'gcloud workflows run $_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA > /workspace/testoutput.log']

# Delete the test workflow
- id: 'delete-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'delete', '$_WORKFLOW_NAME-$BRANCH_NAME-$SHORT_SHA', '--quiet']

# Check the test output
- id: 'check-test-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: 'bash'
  args: ['gitops/test-$BRANCH_NAME.sh']

# Deploy the workflow
- id: 'deploy-workflow'
  name: 'gcr.io/cloud-builders/gcloud'
  args: ['workflows', 'deploy', '$_WORKFLOW_NAME-$BRANCH_NAME', '--source', 'gitops/workflow.yaml']

从 Git 代码库触发构建时,Cloud Build 会填充 $BRANCH_NAME$SHORT_SHA 替代变量。代表分支的名称 字符。

借助 $_WORKFLOW_NAME 替换变量,您可以使用不同的变量值重复使用配置文件。您可以在创建 构建触发器。

如需了解详情,请参阅创建构建配置文件

创建构建触发器

您可以通过创建 Cloud Build 触发器。

如需为上一部分中的配置文件创建构建触发器,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往 Cloud Build 触发器页面:

    前往“触发器”

  2. 点击创建触发器

  3. 名称字段中,为触发器输入名称。

  4. 对于事件,选择用于调用触发器的事件。

    例如:推送到分支

  5. 对于来源,请选择您的代码库以及用于启动触发器的分支或标记名称。您可以使用正则表达式来指定 与某个分支或标记匹配。

    例如:GoogleCloudPlatform/workflows-demos(代码库)和 ^main$|^staging$(与 mainstaging 分支匹配)

  6. 展开显示包含和忽略的文件过滤条件部分,然后指定 以包含的文件的形式传递工作流,以便在发生更改时调用构建。

    例如:gitops/workflow.yaml

  7. 对于配置,选择 Cloud Build 配置文件(YAML 或 JSON)作为类型,并选择 Repository(代码库)作为位置。

  8. Cloud Build 配置文件位置字段中,指定文件的位置。

    例如:gitops/cloudbuild.yaml

  9. (可选)如需添加替换变量,请点击添加变量,然后指定键值对。

    例如:_WORKFLOW_NAME(变量)和 workflows-gitops(值)

  10. 如需保存构建触发器,请点击创建

当有任何更改推送到 Git 代码库的指定分支中的工作流时,系统会自动触发 Cloud Build 来部署该工作流。

如需了解详情,请参阅 创建和管理构建触发器

测试构建触发器

您可以测试前面部分中的构建触发器和配置文件。

  1. 在 Git 代码库的 staging 分支中,修改 workflow.yaml,然后 将 Hello World 更改为 Bye World

    main:
      steps:
        - init:
            assign:
              - message: "Hello World"
        - returnResult:
            return: ${message}
  2. 提交更改并将其推送到 staging 分支。

    git add workflow.yaml
    git commit -m "Update workflow.yaml in staging"
    git push
    

    Cloud Build 触发器运行并启动构建。

  3. 如需确认构建是否成功,请在 Google Cloud 控制台中前往构建历史记录页面:

    前往“构建记录”页面

    构建完成后,Cloud Build 会提供总体状态, 和每个构建步骤如需了解详情,请参阅 查看构建结果

  4. 如需确认是否已部署预演工作流,请在 Google Cloud 控制台中执行以下操作: 转到工作流页面:

    前往 Workflows

    您应该会看到一个名为 workflows-gitops-staging 的工作流已列出。

  5. 如需将暂存工作流部署到生产环境,请将 staging 分支合并到 main 分支:

    git checkout main
    git merge staging
    git push
    

    请注意,由于 test-main.sh 预计工作流的输出中会包含 Hello World,因此 build 将失败:

    RESULT_EXPECTED="result: '\"Hello World\"'"
    RESULT_ACTUAL=$(grep "result: " $FILE)
    if [[ $RESULT_EXPECTED == $RESULT_ACTUAL ]]; then
      echo "Result test passed"
    else
      echo "Result test failed. Expected: $RESULT_EXPECTED Actual: $RESULT_ACTUAL"; exit 1;
    fi
  6. 如需成功部署生产工作流,请在 staging 分支中再次修改 workflow.yaml,并将字符串改回 Hello World

  7. 提交更改并将其推送到 staging 分支,然后合并 staging 分支指向 main 分支。

  8. 如需确认已部署生产工作流,请在 Google Cloud 控制台中前往 Workflows 页面:

    前往 Workflows

    您应该会看到列出一个名为 workflows-gitops-main 的工作流程。

后续步骤