部署到 Cloud Run

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

Cloud Run 是一个托管式计算平台,可让您在无服务器环境中运行无状态容器。使用 Cloud Build,您可以将 Container Registry 和 Artifact Registry 中的容器映像部署到 Cloud Run。您可以部署现有映像、构建和部署映像,或自动执行部署。

如需详细了解 Cloud Run,请参阅 Cloud Run 文档

准备工作

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

    启用 API

必需的 IAM 权限

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

完全代管

要部署到 Cloud Run(全代管式),请向 Cloud Build 服务帐号授予 Cloud Run Admin 和 Service Account User 角色:

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

    转到 Cloud Build 设置页面

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

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

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

Anthos on Google Cloud

要部署到 Cloud Run for Anthos,请向 Kubernetes Build 服务帐号授予 Kubernetes Engine Developer 角色:

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

    转到 Cloud Build 设置页面

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

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

如果您的映像存储在您要部署到的 Cloud 项目之外的项目中,则您需要额外的 IAM 权限,如从其他 GCP 项目部署映像中所述。

构建和部署容器

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', 'REGION', '--platform', 'managed']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    其中:

    • SERVICE-NAME 是 Cloud Run 服务的名称。
    • REGION 是要部署的 Cloud Run 服务的地区。
    • PROJECT_ID 是在其中存储映像的 Google Cloud 项目的 ID。
    • IMAGE 是 Container Registry 中的映像名称。

    Anthos on Google Cloud

    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', '--cluster', 'CLUSTER', '--cluster-location', 'CLUSTER_LOCATION', '--platform', 'gke']
    images:
    - gcr.io/PROJECT_ID/IMAGE
    

    其中:

    • SERVICE-NAME 是 Cloud Run 服务的名称。
    • CLUSTER 是您的 Cloud Run for Anthos on Google Cloud 集群的名称。
    • CLUSTER_LOCATION 是 Cloud Run for Anthos on Google Cloud 集群的位置。
    • PROJECT_ID 是在其中存储映像的 Google Cloud 项目的 ID。
    • IMAGE 是 Container Registry 中的映像名称。
  3. 导航到项目根目录,然后运行以下命令:

     gcloud builds submit
    

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

持续部署

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

要自动部署到 Cloud Run,请执行以下操作:

  1. 在您的代码库根目录中,添加一个包含构建映像的步骤的配置文件,接着将映像推送到 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'
       - 'REGION'
       - '--platform'
       - 'managed'
     images:
     - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
    

    其中:

    • SERVICE-NAME 是 Cloud Run 服务的名称。
    • REGION 是要部署的 Cloud Run 服务的地区。

    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/google.com/cloudsdktool/cloud-sdk'
       entrypoint: 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 服务的名称。
    • CLUSTER 是您的 Cloud Run for Anthos on Google Cloud 集群的名称。
    • CLUSTER_LOCATION 是 Cloud Run for Anthos on Google Cloud 集群的位置。

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

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

    1. 打开触发器页面

      转到“触发器”页面

    2. 点击创建触发器

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

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

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

    6. 构建配置下,选择 Cloud Build 配置文件

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

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

  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 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 命令,其中 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 的构建配置文件:

后续步骤