从源代码部署工作器池

本页面介绍了如何使用单个 gcloud CLI 命令(带有 --source 标志的 gcloud beta run worker-pools deploy)直接从源代码将新的工作器池或工作器池修订版本部署到 Cloud Run。

在后台,此命令使用 Google Cloud 的 Buildpack 和 Cloud Build 基于您的源代码自动构建容器映像,无需在机器上安装 Docker 或者设置 Buildpack 或 Cloud Build。默认情况下,Cloud Run 使用 Cloud Build 提供的默认机器类型。运行 gcloud beta run worker-pools deploy 无需再运行 gcloud builds submit 命令。

请注意,源部署使用 Artifact Registry 来存储构建的容器。如果您的项目在您要部署到的区域中还没有名为 cloud-run-source-deploy 的 Artifact Registry 代码库,此功能会自动创建一个名为 cloud-run-source-deploy 的 Artifact Registry 代码库。

如果源代码目录中有 Dockerfile,那么上传的源代码将使用该 Dockerfile 来构建。如果源代码目录中不存在 Dockerfile,Google Cloud 的 Buildpack 会使用 Google 管理的安全基础映像,自动检测您正在使用的语言,并提取代码的依赖项,以实现可正式投入生产的容器映像。

支持的语言

除了包含 Dockerfile 的源代码之外,从源代码部署还支持以下语言(使用 Google Cloud 的 buildpack):

  • Go
  • Node.js
  • Python
  • Java
  • Kotlin
  • Groovy
  • Scala
  • .NET
  • Ruby
  • PHP
详细了解支持的语言版本

此功能的限制

  • 从源代码部署时使用 Artifact Registry 和 Cloud Build,因此此功能仅在 Artifact Registry 支持的区域Cloud Build 支持的区域提供。
  • 从源代码部署是一项便捷功能,不允许对构建进行全面自定义。如需进行更多控制,请使用 Cloud Build 构建容器映像(例如,使用 gcloud builds submit),然后部署容器映像(例如,使用 gcloud beta run worker-pools deploy --image)。
  • 使用 Google Cloud 的 buildpack 从源代码部署会将源文件的上次修改日期设置为 1980 年 1 月 1 日。这是 Buildpack 的默认行为,旨在支持可重现的 build。这可能会影响静态文件的浏览器端缓存,具体取决于您的语言框架。如果您的应用受此影响,Google 建议您在应用中停用 etagLast-Modified HTTP 标头。
  • 使用 Google Cloud 的 buildpack 从源代码部署始终使用 gcr.io/buildpacks/builder:latest。如果您的首选语言或操作系统配置在 latest 中不可用,请使用特定构建器通过首选构建器创建应用映像。
  • 您可以使用 Kotlin 和其他 JVM 语言(例如 Java)从源代码部署工作器池。您使用的语言必须符合以下规则:

    • 您可以使用 Maven 或 Gradle 构建应用。
    • 构建文件包含产品类所需的所有插件。

准备工作

  • 确保您已按照设置页面中的说明为 Cloud Run 设置了新项目。
  • Enable the Cloud Run Admin API and Cloud Build APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

    启用 Cloud Run Admin API 后,系统会自动创建 Compute Engine 默认服务账号。

所需的角色

您或您的管理员必须为部署者账号和 Cloud Build 服务账号授予以下 IAM 角色。

点击可查看部署者账号所需的角色

如需获得从来源进行构建和部署所需的权限,请让管理员向您授予以下 IAM 角色:

点击可查看 Cloud Build 服务账号需要的角色

除非您替换此行为,否则 Cloud Build 会自动使用 Compute Engine 默认服务账号作为默认 Cloud Build 服务账号来构建源代码和 Cloud Run 资源。为了让 Cloud Build 能够构建来源,请让管理员向项目的 Compute Engine 默认服务账号授予 Cloud Run Builder (roles/run.builder):

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

PROJECT_NUMBER 替换为您的 Google Cloud项目编号,将 PROJECT_ID 替换为您的 Google Cloud项目 ID。如需详细了解如何查找项目 ID 和项目编号,请参阅创建和管理项目

向 Compute Engine 默认服务账号授予 Cloud Run Builder 角色需要几分钟时间才能传播

如需查看与 Cloud Run 关联的 IAM 角色和权限的列表,请参阅 Cloud Run IAM 角色Cloud Run IAM 权限。如果您的 Cloud Run 工作器池与Google Cloud API(例如 Cloud 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

从源代码部署

如需从源代码进行部署,请执行以下操作:

1.

In the Google Cloud console, activate Cloud Shell.

Activate Cloud Shell

At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  1. 切换到源代码目录。源目录会使用 Dockerfile(如果存在),但这不是必需的。

  2. 构建和部署工作器池:

    gcloud beta run worker-pools deploy WORKERPOOL --source .
    WORKERPOOL 替换为您要用于工作器池的名称。

  3. 在系统提示时通过响应 y 来响应任何提示,以安装所需 API。您只需为项目执行一次此操作。如果您尚未按照设置页面中的说明为其他提示设置默认值,请通过提供平台和区域来响应这些提示。

  4. 等待构建和部署完成。完成后,Cloud Run 会显示一条成功消息。

从源代码自动构建

为了避免本地来源中发生无版本控制的更改,Google 建议您在将更改推送到 Git 代码库时自动部署。为了简化此过程,您可以将持续部署关联到 Cloud Run 工作器池并进行配置。通过将 GitHub 代码库关联到 Cloud Run,您可以配置构建和部署代码库,而无需编写 Dockerfile 或构建文件。

后续步骤

部署 Cloud Run 工作器池后,您可以执行以下操作: