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

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

要使用 Cloud Build 自动执行部署,请按如下所述操作:

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

    • 构建容器映像
    • 将映像推送到 Container Registry
    • 将新的修订版本部署到 Cloud Run for Anthos on Google Cloud 服务

    为此,请在代码库的根目录下添加名为 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]'
       - '--platform'
       - 'managed'
     images:
     - 'gcr.io/$PROJECT_ID/[SERVICE-NAME]:$COMMIT_SHA'
    

    替换

    • [SERVICE-NAME] 替换为 Cloud Run for Anthos on Google Cloud 服务的名称。
    • [REGION] 替换为您要部署 Cloud Run for Anthos on Google Cloud 服务的区域。

    Anthos on Google Cloud

     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'
       - '--cluster'
       - '[CLUSTER]'
       - '--cluster-location'
       - '[CLUSTER_LOCATION]'
       - '--platform'
       - 'gke'
     images:
     - 'gcr.io/$PROJECT_ID/[SERVICE-NAME]:$COMMIT_SHA'
    

    替换

    • [SERVICE-NAME] 替换为 Cloud Run for Anthos on Google Cloud 服务的名称。
    • [CLUSTER] 替换为您的 Cloud Run for Anthos on Google Cloud 集群的名称。
    • [CLUSTER_LOCATION] 替换为您的 Cloud Run for Anthos on Google Cloud 集群的位置。

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

  2. 授予对 Cloud Build 服务帐号的访问权限以部署服务:

    全托管式

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

    1. 打开 Cloud Console 中的 Cloud Build“设置”页面:

      访问 Cloud Build 的“设置”页面

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

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

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

    Anthos on Google Cloud

    向 Cloud Build 服务帐号授予 Kubernetes Engine Developer 角色:

    1. 打开 Cloud Console 中的 Cloud Build“设置”页面:

      访问 Cloud Build 的“设置”页面

    2. 在“服务帐号权限”面板中,将 Kubernetes Engine Developer 角色的状态设置为启用

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

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

    访问“触发器”页面

    1. 点击创建触发器
    2. 名称字段中,为触发器输入名称。
    3. 事件下方,选择要启动触发器的代码库事件。
    4. 来源下方,选择您的代码库以及用于启动触发器的分支或标记名称。如需详细了解如何指定要自动构建的分支,请参阅创建构建触发器
    5. 构建配置下,选择 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 Console 中的服务帐号页面。

    转到“服务帐号”

  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 替换为您的服务帐号地址。

如需了解详情,请参阅部署权限

后续步骤

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