Cloud Run 和 Cloud Run for Anthos 是计算平台,可让您在无服务器环境中运行无状态容器。使用 Cloud Build,您可以将 Container Registry 和 Artifact Registry 中的容器映像部署到 Cloud Run。您可以部署现有映像、构建和部署映像,或自动执行部署。
准备工作
-
启用 Cloud Build, Cloud Run, Container Registry, and Resource Manager API。
准备好应用源代码。您的源代码需要存储在代码库中,例如 Cloud Source Repositories、GitHub 或 Bitbucket。
如需运行此页面中的
gcloud
命令,请安装 Google Cloud CLI。
必需的 IAM 权限
如果您的映像存储在要部署到的 Cloud 项目中,或者您的映像在 Container Registry 中是公开的,则您需要以下 IAM 权限:
Cloud Run
要部署到 Cloud Run,请向 Cloud Build 服务帐号授予 Cloud Run Admin 和 Service Account User 角色:
打开 Google Cloud 控制台中的“Cloud Build 设置”页面:
在“服务帐号权限”面板中,将 Cloud Run Admin 角色的状态设置为已启用:
在“需要执行其他步骤”的弹出式窗口中,点击授予对所有服务帐号的访问权限。
Cloud Run for Anthos
要部署到 Cloud Run for Anthos,请向 Kubernetes Build 服务帐号授予 Kubernetes Engine Developer 角色:
打开 Google Cloud 控制台中的“Cloud Build 设置”页面:
在“服务帐号权限”面板中,将 Kubernetes Engine Developer 角色的状态设置为已启用:
如果您的映像存储在您要部署到的 Cloud 项目以外的其他 Cloud 项目中,则需要额外的 IAM 权限,如从其他 Google Cloud 项目部署映像中所述。
构建和部署容器
Cloud Build 允许您构建容器映像,将构建的映像存储到 Container Registry 中,然后将映像部署到 Cloud Run。
要构建和部署容器映像,请执行以下操作:
在项目根目录中,创建一个名为
cloudbuild.yaml
的配置文件。在构建配置文件中,添加
docker
构建步骤来构建映像并将其推送到 Container Registry,然后添加gcloud
构建步骤来调用gcloud run deploy
命令,以便在 Cloud Run 上部署该映像: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'] images: - gcr.io/PROJECT_ID/IMAGE
其中:
SERVICE-NAME
是 Cloud Run 服务的名称。REGION
是要部署的 Cloud Run 服务的地区。PROJECT_ID
是在其中存储映像的 Google Cloud 项目的 ID。IMAGE
是 Container Registry 中的映像名称。
Cloud Run for Anthos
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 for Anthos - 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 集群的名称。CLUSTER_LOCATION
是您的 Cloud Run for Anthos 集群的位置。PROJECT_ID
是在其中存储映像的 Google Cloud 项目的 ID。IMAGE
是 Container Registry 中的映像名称。
转到项目根目录,然后运行以下命令,其中
REGION
是运行构建的受支持 build 区域之一:gcloud builds submit --region=REGION
成功完成后,系统会显示一条成功消息以及已部署服务的网址。
持续部署
通过创建 Cloud Build 触发器,您可以将软件自动部署到 Cloud Run 和 Cloud Run for Anthos。您可以将触发器配置为每次您在更新源代码时都会构建和部署映像。
如需自动执行部署,请执行以下操作:
在代码库根目录中,添加一个名为
cloudbuild.yaml
的配置文件(包含构建映像的步骤),将映像推送到 Container Registry,然后调用gcloud run deploy
命令:Cloud Run
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' images: - 'gcr.io/$PROJECT_ID/SERVICE-NAME:$COMMIT_SHA'
其中:
SERVICE-NAME
是 Cloud Run 服务的名称。REGION
是要部署的 Cloud Run 服务的地区。
Cloud Run for Anthos
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 for Anthos - 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 集群的名称。CLUSTER_LOCATION
是您的 Cloud Run for Anthos 集群的位置。
从 Git 代码库触发使用的
$COMMIT_SHA
替代变量时,Cloud Build 会填充该变量。使用上一步中创建的配置文件创建一个构建触发器:
完成!从现在开始,向代码库执行的每一次推送都会自动调用构建并将相关内容部署到 Cloud Run 服务。
每当您将新代码推送到代码库时,都将自动触发构建并将映像部署到 Cloud Run 服务。
如需详细了解如何创建 Cloud Build 触发器,请参阅创建和管理构建触发器。
使用最低 IAM 权限
将一个容器部署到 Cloud Run 服务时,该容器将使用此 Cloud Run 服务的运行时服务帐号的身份运行。 由于 Cloud Build 可以自动部署新容器,因此 Cloud Build 需要能够充当 Cloud Run 服务的运行时服务帐号。
如要授予对 Cloud Build 的有限访问权限以部署到 Cloud Run 服务,请执行以下操作:
控制台
前往 Google Cloud Console 中的服务帐号页面。
点击 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 的代码示例。
后续步骤
- 了解如何使用 Google Cloud Deploy 部署到 Cloud Run。
- 了解如何在 GKE 上部署。
- 了解如何在 Cloud Functions 上部署。
- 了解如何在 App Engine 上部署。
- 了解如何在 Firebase 上部署。
- 详细了解 Cloud Run 或 Cloud Run for Anthos。
- 了解如何排查构建错误。