Cloud Run 可让您在 无服务器环境中运行无状态映像。 使用 Cloud Build,您可以将 Artifact Registry 中的映像部署到 Cloud Run。您可以部署现有映像、构建和部署映像,或自动执行部署。
准备工作
启用 Cloud Build API、Cloud Run API、Artifact Registry API 和 Resource Manager API。
启用 API 所需的角色
如需启用 API,您需要拥有 Service Usage Admin IAM 角色 (
roles/serviceusage.serviceUsageAdmin),该角色包含serviceusage.services.enable权限。了解如何授予 角色。
准备好应用源代码。您的源代码需要存储在 GitHub 或 Bitbucket 等代码库中。
如需运行此页面中的
gcloud命令,请安装 Google Cloud CLI。如果您使用的是 VPC Service Controls,请在 VPC Service Controls 边界内设置专用池。您还必须配置 Cloud Run for VPC Service Controls。
所需的 Identity and Access Management 权限
-
在 Google Cloud 控制台中,前往 settings Cloud Build 权限 页面:
对于您的 指定的 Cloud Build 服务账号 或 默认 Cloud Build 服务账号,请将以下角色的状态设置为 已启用:
- Cloud Run Admin (
roles/run.admin) | 让 Cloud Build 将新服务部署到 Cloud Run。- 在“分配服务账号用户角色”面板中,选择要模拟的服务帐号,然后点击授予权限。
- Storage Admin (
roles/storage.admin) | 启用从 Cloud Storage 读取和写入。 - Artifact Registry Writer (
roles/artifactregistry.writer) | 允许从 Artifact Registry 拉取映像并写入到其中。 - Logs Writer (
roles/logging.logWriter) | 允许将日志条目写入 Cloud Logging。 - Cloud Build Editor (
roles/cloudbuild.builds.editor) | 允许您的服务帐号运行构建。
- Cloud Run Admin (
构建和部署映像
Cloud Build 可让您构建映像,将构建的映像存储到 Artifact Registry 中,然后将映像部署到 Cloud Run。
如需构建和部署映像,请执行以下操作:
在项目根目录中,创建一个名为
cloudbuild.yaml的配置文件。在构建配置文件中,添加
docker构建步骤来构建映像并 将其推送到 Artifact Registry,然后添加gcloud构建步骤来 调用gcloud run deploy命令,以便在 Cloud Run 上部署该映像:steps: # Build the image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '.'] # Push the image to Artifact Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'] # Deploy image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: ['run', 'deploy', 'SERVICE_NAME', '--image', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE', '--region', 'SERVICE_REGION'] images: - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE'其中:
REPOSITORY是您从中部署映像的 Artifact Registry 代码库的名称。LOCATION是 Artifact Registry 代码库的位置,例如us-east1。PROJECT_ID是存储映像的 Google Cloud 项目 ID。SERVICE_NAME是 Cloud Run 服务的名称。SERVICE_REGION是要部署的 Cloud Run 服务的区域。IMAGE是 Artifact Registry 中的映像名称。
前往项目根目录并运行以下命令,其中
LOCATION是用于运行构建的 受支持构建地区 之一:gcloud builds submit --region=LOCATION
成功完成后,系统会显示一条成功消息以及已部署服务的网址。
持续部署
通过创建 Cloud Build 触发器,您可以将软件自动部署到 Cloud Run。您可以将触发器配置为每次您在更新源代码时都会构建和部署映像。
如需自动执行部署,请执行以下操作:
在代码库根目录中,添加一个名为
cloudbuild.yaml的配置文件,其中包含构建映像的步骤,接着将映像推送到 Artifact Registry,然后调用gcloud run deploy命令:steps: # Build the image - name: 'gcr.io/cloud-builders/docker' args: ['build', '-t', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA', '.'] # Push the image to Artifact Registry - name: 'gcr.io/cloud-builders/docker' args: ['push', 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'] # Deploy image to Cloud Run - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk' entrypoint: gcloud args: - 'run' - 'deploy' - 'SERVICE_NAME' - '--image' - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA' - '--region' - 'SERVICE_REGION' images: - 'LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY/IMAGE/SERVICE_NAME:$COMMIT_SHA'其中:
REPOSITORY是您从中部署映像的 Artifact Registry 代码库的名称。LOCATION是 Artifact Registry 代码库的位置,例如us-east1。PROJECT_ID是存储映像的 Google Cloud 项目 ID。SERVICE_NAME是 Cloud Run 服务的名称。SERVICE_REGION是要部署的 Cloud Run 服务的区域。IMAGE是 Artifact Registry 中的映像名称。
从 Git 代码库触发使用的
$COMMIT_SHA替代变量时,Cloud Build 会填充该变量。使用上一步中创建的配置文件创建一个构建触发器:
打开触发器 页面:
点击创建触发器。
在名称 字段中,为触发器输入名称。
在区域 下,选择触发器的区域。
在事件下,选择要启动触发器的代码库事件。
在来源下方,选择您的代码库以及用于启动触发器的分支或标记名称。如需详细了解如何指定要自动构建的分支,请参阅 创建构建触发器。
在配置下,选择Cloud Build 配置文件(YAML 或 JSON)。
在 Cloud Build 配置文件位置 字段中, 在
/后面输入cloudbuild.yaml。点击创建 以保存您的构建触发器。
现在,当您将新代码推送到代码库时,Cloud Build 会调用构建并将服务部署到 Cloud Run。
如需详细了解如何创建 Cloud Build 触发器,请参阅 创建和管理构建触发器。
代码示例
以下是一些示例代码库,每个代码库都包含一个示例应用和一个将应用部署到 Cloud Run 的构建配置文件:
- deploy-prebuilt:用于演示如何将预构建的映像部署到 Cloud Run 的代码示例。
- run-example-builddeploy:演示了如何构建映像并将其部署到 Cloud Run 的代码示例。
后续步骤
- 了解如何使用 Cloud Deploy 部署到 Cloud Run。
- 了解如何在 GKE 上部署。
- 了解如何在 Cloud Run 函数上部署。
- 了解如何在 App Engine 上部署。
- 了解如何在 Firebase 上部署。
- 了解如何在 Compute Engine 上执行蓝绿部署。
- 了解如何排查构建错误。