配置用户指定的服务帐号

本页面介绍如何为构建配置用户指定的服务帐号。

默认情况下,Cloud Build 使用特殊服务帐号代表您执行构建。此服务帐号称为 Cloud Build 服务帐号,当您在 Google Cloud 项目中启用 Cloud Build API 时,系统会自动创建该服务帐号。此服务帐号默认拥有多个权限,例如更新构建或写入日志。

您可以指定自己的服务帐号,以代表您执行构建,而不是使用默认的 Cloud Build 服务帐号。您可以为每个项目指定任意数量的服务帐号。通过维护多个服务帐号,您可以根据服务帐号执行的任务向它们授予不同的权限。例如,您可以使用一个服务帐号来构建映像并推送到 Container Registry,然后使用另一个服务帐号来构建映像并推送到 Artifact Registry。

准备工作

  • 启用 Cloud Build and IAM API。

    启用 API

  • 如需使用本指南中的命令行示例,请安装并配置 Cloud SDK

  • 确保您已经创建了要使用的服务帐号。 您必须在运行构建所在的 Cloud 项目中创建该帐号。

设置构建日志

要为构建指定您自己的服务帐号,您必须将构建日志为存储在 Cloud Logging 或您自己的 Cloud Storage 存储分区中:

必需的 IAM 权限

有关向服务帐号授予 IAM 角色的说明,请参阅配置对资源的访问权限

从命令行运行构建

  1. 在项目根目录中,创建名为 cloudbuild.yamlcloudbuild.json 的 Cloud Build 构建配置文件。

  2. 在构建配置文件中:

    • 添加 serviceAccount 字段,并指定您的服务帐号的电子邮件地址。
    • 如果您将构建日志存储在 Cloud Storage 存储分区中,请添加 logsBucket 字段,并指向您的 Cloud Storage 存储分区。

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    serviceAccount: 'projects/PROJECT_NAME/serviceAccounts/SERVICE_ACCOUNT'
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
      "serviceAccount": "projects/PROJECT_NAME/serviceAccounts/SERVICE_ACCOUNT"
    }
    

    将构建配置文件中的占位值替换为以下内容:

    • LOGS_BUCKET_LOCATION:用于存储构建日志的 Cloud Storage 存储桶。例如 gs://mylogsbucket
    • PROJECT_NAME:要在其中运行构建的 Cloud 项目的名称。
    • SERVICE_ACCOUNT 是您要为构建指定的服务帐号的电子邮件地址或唯一 ID。
  3. 使用构建配置文件启动构建:

     gcloud builds submit --config CONFIG_FILE_PATH SOURCE_DIRECTORY
    

将上述命令中的占位值替换为以下内容:

  • CONFIG_FILE_PATH 是构建配置文件的路径。
  • SOURCE_DIRECTORY 是源代码的路径或网址。

如果您未在 gcloud builds submit 命令中指定 CONFIG_FILE_PATHSOURCE_DIRECTORY,Cloud Build 会假定构建配置文件和源代码位于当前工作目录中。

使用构建触发器运行构建

  1. 在源代码库中,创建一个名为 cloudbuild.yamlcloudbuild.json 的 Cloud Build 构建配置文件。

  2. 将构建配置为在 Logging用户创建的 Cloud Storage 存储桶中存储日志。如果您要使用用户指定的服务帐号,则不能使用默认存储桶。在下面的示例中,logsBucket 字段指向 Cloud Storage 存储桶:

    YAML

    steps:
    - name: 'bash'
      args: ['echo', 'Hello world!']
    logsBucket: 'LOGS_BUCKET_LOCATION'
    

    JSON

    {
      "steps": [
      {
        "name": "bash",
        "args": [
          "echo",
          "Hello world!"
        ]
      }
      ],
      "logsBucket": "LOGS_BUCKET_LOCATION",
    

    将构建配置文件中的占位值替换为以下内容:

    • LOGS_BUCKET_LOCATION:用于存储构建日志的 Cloud Storage 存储桶。例如 gs://mylogsbucket
  3. 指定要用于构建触发器的服务帐号:

    控制台

    1. 创建或修改构建触发器
    2. 服务帐号字段中,指定您的服务帐号。如果您未指定服务帐号,则使用默认的 Cloud Build 服务帐号
    3. 点击创建以保存您的构建触发器。

    gcloud

    创建构建触发器时,请使用 --service-account 标志指定服务帐号。如果您未指定服务帐号,则使用默认的 Cloud Build 服务帐号。在以下示例中,gcloud 命令会在源代码位于 GitHub 中时创建一个构建触发器:

     gcloud beta builds triggers create github \
        --name=TRIGGER_NAME \
        --repo-name=REPO_NAME \
        --repo-owner=REPO_OWNER \
        --branch-pattern=BRANCH_PATTERN
        --build-config=BUILD_CONFIG_FILE
        --service-account=SERVICE_ACCOUNT
    

    将构建配置文件中的占位值替换为以下内容:

    • TRIGGER_NAME 是构建触发器的名称。
    • REPO_NAME 是代码库的名称。
    • REPO_OWNER 是代码库所有者的用户名。
    • BRANCH_PATTERN 是代码库中要在其上调用构建的分支名称。
    • TAG_PATTERN 是代码库中要在其上调用构建的标记名称。
    • BUILD_CONFIG_FILE 是构建配置文件的路径。
    • SERVICE_ACCOUNT 是与您的服务帐号相关联的电子邮件地址。

构建触发器会调用构建以响应与触发器关联的事件。例如,触发器会在将源代码推送到代码库时执行。如需详细了解触发器,请参阅创建和管理构建触发器

后续步骤