从源代码部署

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

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

请注意,源部署使用 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 支持的语言版本

此功能的限制

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

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

准备工作

  • 确保您已按照setup页面中的说明为 Cloud Run 设置了新项目。
  • 如果您通过网域限制组织政策来限制项目的未经身份验证的调用,则您需要按照测试专用服务中的说明访问已部署的服务。

所需的角色

如需获得从源代码部署 Cloud Run 服务所需的权限,请让管理员向您授予项目的以下 IAM 角色:

如需查看与 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 替换为您要用于服务的名称。

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

  3. 等待构建和部署完成。完成后,系统会显示类似如下内容的消息:

    Service [my-app] revision [my-app-00000-xxx] has been deployed and is serving 100 percent of traffic. Service URL: https://my-app-texampleq-uc.a.run.app

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

从源代码自动构建

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

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

后续步骤

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

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