从源代码部署服务

本页面介绍了如何使用单个 gcloud CLI 命令(带有 --source 标志的 gcloud run deploy)直接从源代码将新服务或服务修订版本部署到 Cloud Run。如需查看部署 Hello World 服务的示例演示,请参阅从源代码部署快速入门

在后台,此命令使用 Google Cloud 的 Buildpack 和 Cloud Build 从源代码自动构建容器映像,而无需在机器上安装 Docker 或者设置 Buildpack 或 Cloud Build。也就是说,上述单条命令完成了本来还需要执行 gcloud builds submitgcloud run deploy 命令才能完成的任务。默认情况下,Cloud Run 使用 Cloud Build 提供的默认机器类型

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

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

默认情况下,安全修复程序仅在部署 Cloud Run 服务时应用。为某个服务启用自动安全更新后,该服务会自动接收补丁,而不会造成任何停机时间。详细了解如何配置安全更新

支持的语言

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

运行时 源代码部署 Buildpack 配置
Go 部署 Go 服务 配置 Go Buildpack
Node.js 部署 Node.js 服务 配置 Node.js Buildpack
Python 部署 Python 服务 配置 Python Buildpack
Java
(包括 Kotlin、Groovy、Scala)
部署 Java 服务 配置 Java Buildpack
.NET 部署 .NET 服务 配置 .NET Buildpack
Ruby 部署 Ruby 服务 配置 Ruby Buildpack
PHP 部署 PHP 服务 配置 PHP Buildpack

详细了解支持的语言版本

此功能的限制

  • 从源代码部署时使用 Artifact Registry 和 Cloud Build,因此此功能仅在 Artifact Registry 支持的区域Cloud Build 支持的区域提供。
  • 从源代码部署是一项便捷功能,不允许对构建进行全面自定义。如需进行更多控制,请使用 Cloud Build 构建容器映像(例如,使用 gcloud builds submit),然后部署容器映像(例如,使用 gcloud run 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 设置了新项目。
  • 如果您通过网域限制组织政策来限制项目的未经身份验证的调用,则您需要按照测试专用服务中的说明访问已部署的服务。

  • 启用 Cloud Run Admin API 和 Cloud Build API:

    gcloud services enable run.googleapis.com \
        cloudbuild.googleapis.com

    启用 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. 切换到源代码目录。请注意,源目录不需要使用 Dockerfile,但如果存在 Dockerfile,则将使用它。

  2. 构建和部署服务:

    gcloud run deploy SERVICE --source .
    SERVICE 替换为您要用于服务的名称。

    可选:如果源代码使用的是某个受支持的语言运行时,并且您想要为运行时配置自动基础映像更新,请使用服务的基础映像指定 --automatic-updates 标志和 --base-image 标志,例如 nodejs22

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

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

部署后,请注意,此服务修订版本可处理所有流量。

从源代码自动构建

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

如需配置自动构建,请按照持续构建页面中的说明设置自动化,请务必选择使用 Buildpack 构建源代码的选项。

后续步骤

部署 Cloud Run 服务后,您可以执行以下操作:

了解源代码部署配置:

您可以使用 Cloud Build 触发器自动构建和部署 Cloud Run 服务: