借助 Cloud Run,您可以在一个可用区内运行无状态容器, 无服务器环境 使用 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 权限
如果您的映像与所需项目存储在同一个 Google Cloud 项目中 或者您的映像是公共映像 在 Container Registry 中,您需要以下 IAM 权限:
如需部署到 Cloud Run,请授予 Cloud Run Admin 和 您用于构建的服务账号的 Service Account User 角色:
打开 Google Cloud 控制台中的“Cloud Build 设置”页面:
从下拉列表中选择要分配其角色的服务账号 更改。
在“服务账号权限”面板中,将 Cloud Run Admin 角色的状态设置为已启用:
在“需要执行其他步骤”的弹出式窗口中,点击授予对所有服务账号的访问权限。
构建和部署容器
Cloud Build 允许您构建容器映像,将构建的映像存储到 Container Registry 中,然后将映像部署到 Cloud Run。
要构建和部署容器映像,请执行以下操作:
在项目根目录中,创建一个名为
cloudbuild.yaml
的配置文件。在构建配置文件中,添加
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 中的映像名称。
转到您的项目根目录并运行以下命令,其中
BUILD_REGION
是受支持的构建区域之一 运行构建:gcloud builds submit --region=BUILD_REGION
成功完成后,系统会显示一条成功消息以及已部署服务的网址。
持续部署
您可以通过以下方式将软件自动部署到 Cloud Run 创建 Cloud Build 触发器您可以将触发器配置为每次您在更新源代码时都会构建和部署映像。
如需自动执行部署,请执行以下操作:
在您的代码库根目录中,添加一个名为
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 会填充该变量。使用在上一步骤中创建的配置文件创建构建触发器 步骤:
完成!从现在开始,向代码库执行的每一次推送都会自动调用构建并将相关内容部署到 Cloud Run 服务。
每当您将新代码推送到代码库时,都将自动触发构建并将映像部署到 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 Functions 上部署。
- 了解如何在 App Engine 上部署。
- 了解如何在 Firebase 上部署。
- 了解如何在 Compute Engine 上执行蓝绿部署。
- 了解如何排查构建错误。