使用 Cloud Build 手动设置持续部署

以下说明假定您拥有一个 Git 代码库,其根目录下有一个 Dockerfile

如要使用 Cloud Build 自动执行 Git 部署,请执行以下操作:

  1. 构建一个 Cloud Build 配置,以便:

    • 构建容器映像
    • 将映像推送到 Container Registry(已弃用)
    • 将新修订版本部署到 Cloud Run 服务

    为此,请在代码库的根目录下添加名为 cloudbuild.yaml 的文件,其中包含以下内容:

     steps:
     # build the container image
     - name: 'gcr.io/cloud-builders/docker'
       args: ['build', '-t', 'gcr.io/$PROJECT_ID/[SERVICE-NAME]:$COMMIT_SHA', '.']
     # push the container image to Container Registry
     - name: 'gcr.io/cloud-builders/docker'
       args: ['push', 'gcr.io/$PROJECT_ID/[SERVICE-NAME]:$COMMIT_SHA']
     # Deploy container image to Cloud Run
     - name: 'gcr.io/cloud-builders/gcloud'
       args:
       - 'run'
       - 'deploy'
       - '[SERVICE-NAME]'
       - '--image'
       - 'gcr.io/$PROJECT_ID/[SERVICE-NAME]:$COMMIT_SHA'
       - '--region'
       - '[REGION]'
     images:
     - 'gcr.io/$PROJECT_ID/[SERVICE-NAME]:$COMMIT_SHA'
    

    替换

    • [SERVICE-NAME] 替换为 Cloud Run 服务的名称。
    • [REGION] 替换为要部署的 Cloud Run 服务所在区域。

    从 Git 代码库触发使用的 $COMMIT_SHA 替代变量时,Cloud Build 会填充该变量。

  2. 向 Cloud Build 服务账号授予 Cloud Run Admin 和 Service Account User 角色:

    1. 打开 Google Cloud 控制台中的“Cloud Build 设置”页面:

      访问 Cloud Build 的“设置”页面

    2. 在“服务账号权限”面板中,将 Cloud Run Admin 角色的状态设置为启用

      “服务账号权限”页面的屏幕截图

    3. 选择授予对所有服务账号的访问权限,为您页面上项目中的所有服务账号授予 Service Account User 角色。

  3. 点击左侧导航面板中的触发器,以打开“触发器”页面:

    访问“触发器”页面

    1. 点击创建触发器
    2. 名称字段中,为触发器输入名称。
    3. 事件下方,选择要启动触发器的代码库事件。
    4. 来源下方,选择您的代码库以及用于启动触发器的分支或标记名称。如需详细了解如何指定要自动构建的分支,请参阅创建构建触发器
    5. Cloud Build 配置文件(yaml 或 json)下,选择 Cloud Build 配置文件
    6. Cloud Build 配置文件位置字段中的 / 后面,输入 cloudbuild.yaml
    7. 点击创建以保存您的构建触发器。
  4. 完成!从现在开始,向代码库执行的每一次推送都会自动调用构建并将相关内容部署到 Cloud Run 服务。

使用最低 IAM 权限实现持续部署

将一个容器部署到 Cloud Run 服务时,该容器将使用此 Cloud Run 服务的运行时服务账号的身份运行。 由于 Cloud Build 可以自动部署新容器,因此 Cloud Build 需要能够充当 Cloud Run 服务的运行时服务账号。

如要授予对 Cloud Build 的有限访问权限以部署到 Cloud Run 服务,请执行以下操作:

控制台界面

  1. 前往 Google Cloud 控制台中的服务账号页面:

    前往“服务账号”

  2. 点击 Cloud Run 服务的运行时服务账号的电子邮件地址(默认情况下为 PROJECT_NUMBER-compute@developer.gserviceaccount.com)。

  3. 点击权限标签页。

  4. 点击 授予访问权限

  5. 输入 Cloud Build 服务账号 (PROJECT_NUMBER@cloudbuild.gserviceaccount.com)

  6. 选择角色下拉列表中,选择服务账号 > Service Account User 角色。

  7. 点击保存

gcloud

使用 gcloud iam service-accounts add-iam-policy-binding 命令:

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"

PROJECT_NUMBER 替换为您的项目的数字 ID。

如果通过自定义服务身份使用 Cloud Run,请将 PROJECT_NUMBER-compute@developer.gserviceaccount.com 替换为您的服务账号地址。

有关详情,请参阅部署权限

后续步骤

  • 如需了解如何将容器映像部署或发布到其他项目中的私有注册表,请参阅设置服务账号权限