使用 Cloud Build 部署到 Cloud Run

本页面介绍如何使用 Cloud Build 自动部署 Cloud Run 服务。如果您刚接触 Cloud Build,请先阅读快速入门构建配置概览

Cloud Run 可让您在无服务器环境中运行无状态容器。 使用 Cloud Build,您可以将 Container Registry(已弃用)和 Artifact Registry 中的容器映像部署到 Cloud Run。您可以部署现有映像、构建和部署映像,或自动执行部署。

准备工作

  • 启用 Cloud Build, Cloud Run, Container Registry, and Resource Manager API。

    启用 API

  • 准备好应用源代码。您的源代码需要存储在 Cloud Source Repositories、GitHub 或 Bitbucket 等代码库中。

  • 如需运行此页面中的 gcloud 命令,请安装 Google Cloud CLI

必需的 IAM 权限

如果您的映像存储在您要部署到的 Google Cloud 项目中,或者您的映像在 Container Registry 中是公开的,则您需要以下 IAM 权限:

如需部署到 Cloud Run,请向 Cloud Build 服务帐号授予 Cloud Run Admin 和 Service Account User 角色:

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

    转到 Cloud Build 设置页面

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

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

  3. 在“需要执行其他步骤”的弹出式窗口中,点击授予对所有服务账号的访问权限

构建和部署容器

Cloud Build 允许您构建容器映像,将构建的映像存储到 Container Registry 中,然后将映像部署到 Cloud Run。

要构建和部署容器映像,请执行以下操作:

  1. 在项目根目录中,创建一个名为 cloudbuild.yaml 的配置文件。

  2. 在构建配置文件中,添加 docker 构建步骤来构建映像并将其推送到 Container Registry,然后添加 gcloud 构建步骤来调用 gcloud run deploy 命令,以便在 Cloud Run 上部署该映像:

    steps:
    # Build the container image
    - name: 'gcr.io/cloud-builders/docker'
      args: ['build', '-t', 'gcr.io/PROJECT_ID/IMAGE', '.']
    # Push the container image to Container Registry
    - name: 'gcr.io/cloud-builders/docker'
      args: ['push', 'gcr.io/PROJECT_ID/IMAGE']
    # Deploy container image to Cloud Run
    - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
      entrypoint: gcloud
      args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'gcr.io/PROJECT_ID/IMAGE', '--region', 'SERVICE_REGION']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    其中:

    • SERVICE_NAME 是 Cloud Run 服务的名称。
    • SERVICE_REGION 是要部署的 Cloud Run 服务的地区。
    • PROJECT_ID 是在其中存储映像的 Google Cloud 项目的 ID。
    • IMAGE 是 Container Registry 中的映像名称。
  3. 转到项目根目录并运行以下命令,其中 BUILD_REGION 是运行 build 的受支持的构建区域之一:

     gcloud builds submit --region=BUILD_REGION
    

成功完成后,系统会显示一条成功消息以及已部署服务的网址。

持续部署

通过创建 Cloud Build 触发器,您可以将软件自动部署到 Cloud Run。您可以将触发器配置为每次您在更新源代码时都会构建和部署映像。

如需自动执行部署,请执行以下操作:

  1. 在您的代码库根目录中,添加名为 cloudbuild.yaml 的配置文件,其中包含构建映像的步骤,将映像推送到 Container Registry,然后调用 gcloud run deploy 命令:

      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/google.com/cloudsdktool/cloud-sdk'
        entrypoint: gcloud
        args:
        - 'run'
        - 'deploy'
        - 'SERVICE_NAME'
        - '--image'
        - 'gcr.io/$PROJECT_ID/SERVICE_NAME:$COMMIT_SHA'
        - '--region'
        - 'SERVICE_REGION'
      images:
      - 'gcr.io/$PROJECT_ID/SERVICE_NAME:$COMMIT_SHA'
    

    其中:

    • SERVICE_NAME 是 Cloud Run 服务的名称。
    • SERVICE_REGION 是要部署的 Cloud Run 服务的地区。

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

  2. 使用上一步中创建的配置文件创建一个构建触发器:

    1. 打开触发器页面

      转到“触发器”页面

    2. 点击创建触发器

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

    4. 区域下,选择触发器的区域

    5. 事件下方,选择要启动触发器的代码库事件。

    6. 来源下方,选择您的代码库以及用于启动触发器的分支或标记名称。如需详细了解如何指定要自动构建的分支,请参阅创建构建触发器

    7. 配置下,选择 Cloud Build 配置文件(YAML 或 JSON)

    8. Cloud Build 配置文件位置字段中的 / 后面,输入 cloudbuild.yaml

    9. 点击创建以保存您的构建触发器。

  3. 完成!从现在开始,向代码库执行的每一次推送都会自动调用构建并将相关内容部署到 Cloud Run 服务。

每当您将新代码推送到代码库时,都将自动触发构建并将映像部署到 Cloud Run 服务。

如需详细了解如何创建 Cloud Build 触发器,请参阅创建和管理构建触发器

使用最低 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 命令,其中 PROJECT_NUMBER您的项目的数字 ID

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

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

代码示例

以下是一些示例代码库,每个代码库都包含一个示例应用和一个将应用部署到 Cloud Run 的构建配置文件:

  • deploy-prebuilt:用于演示如何将预构建的映像部署到 Cloud Run 的代码示例。
  • run-example-builddeploy:演示了如何构建映像并将其部署到 Cloud Run 的代码示例。

后续步骤