借助 Cloud Run,您可以在无服务器环境中运行无状态映像。使用 Cloud Build,您可以将 Container Registry(已弃用)和 Artifact Registry 中的映像部署到 Cloud Run。您可以部署现有映像、构建和部署映像,或自动执行部署。
准备工作
-
Enable the Cloud Build, Cloud Run, Container Registry, and Resource Manager APIs.
准备好应用源代码。您的源代码需要存储在代码库中,例如 Cloud Source Repositories、GitHub 或 Bitbucket。
如需运行此页面中的
gcloud
命令,请安装 Google Cloud CLI。如果您使用的是 VPC Service Controls,请在 VPC Service Controls 边界中设置专用池。您还必须为 Cloud Run 配置 VPC Service Controls。
所需的 Identity and Access Management 权限
如需获得使用 Cloud Build 部署到 Cloud Run 所需的权限,请让管理员向您授予默认 Cloud Build 服务账号的以下 IAM 角色:
-
Cloud Run Developer (
roles/run.developer
) -
Logs Writer (
roles/logging.logWriter
) -
Artifact Registry Writer (
roles/artifactregistry.writer
) -
Service Account User (
roles/iam.serviceAccountUser
) -
Storage Admin (
roles/storage.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
是运行 build 的受支持的 build 区域之一:gcloud builds submit --region=LOCATION
成功完成后,系统会显示一条成功消息以及已部署服务的网址。
持续部署
通过创建 Cloud Build 触发器,您可以将软件自动部署到 Cloud Run。您可以将触发器配置为每次您在更新源代码时都会构建和部署映像。
如需自动执行部署,请执行以下操作:
在您的代码库根目录中,添加一个名为
cloudbuild.yaml
的配置文件,其中包含构建映像的步骤,接着将映像推送到 Container 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 代码库触发时,Cloud Build 会填充
$COMMIT_SHA
替代变量。使用上一步中创建的配置文件创建一个构建触发器:
打开触发器页面
点击创建触发器。
在名称字段中,为触发器输入名称。
在区域下,为触发器选择区域。
在事件下方,选择要启动触发器的代码库事件。
在来源下方,选择您的代码库以及用于启动触发器的分支或标记名称。如需详细了解如何指定要自动构建的分支,请参阅创建构建触发器
在配置下,选择 Cloud Build 配置文件(YAML 或 JSON)。
在 Cloud Build 配置文件位置字段中的
/
后面,输入cloudbuild.yaml
。点击创建以保存您的构建触发器。
现在,当您将新代码推送到代码库时,Cloud Build 会调用构建并将服务部署到 Cloud Run。
如需详细了解如何创建 Cloud Build 触发器,请参阅创建和管理构建触发器。
使用最低 IAM 权限
将映像部署到 Cloud Run 服务时,该映像将使用 Cloud Run 服务中的运行时服务账号的身份运行。由于 Cloud Build 可以自动部署新映像,因此 Cloud Build 需要能够充当 Cloud Run 服务的运行时服务账号。
如要授予对 Cloud Build 的有限访问权限以部署到 Cloud Run 服务,请执行以下操作:
控制台
前往 Google Cloud 控制台中的服务账号页面:
点击 Cloud Run 服务的运行时服务账号的电子邮件地址(默认为
PROJECT_NUMBER-compute@developer.gserviceaccount.com
)。点击权限标签页。
点击
授予访问权限。输入 Cloud Build 服务账号 (
PROJECT_NUMBER@cloudbuild.gserviceaccount.com
)在选择角色下拉列表中,依次选择服务账号 > Service Account User 角色。
点击保存。
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 的代码示例。
后续步骤
- 了解如何使用 Cloud Deploy 部署到 Cloud Run。
- 了解如何在 GKE 上部署。
- 了解如何在 Cloud Run functions 上部署。
- 了解如何在 App Engine 上部署。
- 了解如何在 Firebase 上部署。
- 了解如何在 Compute Engine 上执行蓝绿部署。
- 了解如何排查构建错误。