本页面介绍了如何使用单个 gcloud CLI 命令(带有 --source
标志的 gcloud beta run worker-pools deploy
)直接从源代码将新的工作器池或工作器池修订版本部署到 Cloud Run。
在后台,此命令使用 Google Cloud 的 Buildpack 和 Cloud Build 从源代码自动构建容器映像,而无需在机器上安装 Docker 或者设置 Buildpack 或 Cloud Build。也就是说,上述单条命令完成了本来还需要执行 gcloud builds submit
和 gcloud beta run worker-pools deploy
命令才能完成的任务。
请注意,源部署使用 Artifact Registry 来存储构建的容器。如果您的项目在您要部署到的区域中还没有名为 cloud-run-source-deploy
的 Artifact Registry 代码库,此功能会自动创建一个名为 cloud-run-source-deploy
的 Artifact Registry 代码库。
如果源代码目录中有 Dockerfile,那么上传的源代码将使用该 Dockerfile 来构建。如果源代码目录中不存在 Dockerfile,Google Cloud 的 Buildpack 会使用 Google 管理的安全基础映像,自动检测您正在使用的语言,并提取代码的依赖项,以实现可正式投入生产的容器映像。
支持的语言
除了包含 Dockerfile 的源代码之外,从源代码部署还支持以下语言:
- 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 workerpools deploy --image
)。 - 使用 Google Cloud 的 buildpack 从源代码部署会将源文件的上次修改日期设置为 1980 年 1 月 1 日。这是 Buildpack 的默认行为,旨在支持可重现的 build。这可能会影响静态文件的浏览器端缓存,具体取决于您的语言框架。如果您的应用受此影响,Google 建议您在应用中停用
etag
和Last-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 Run Source Developer (
roles/run.sourceDeveloper
) - 针对项目的 Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer
) - 针对 Cloud Run 服务身份的 Service Account User (
roles/iam.serviceAccountUser
)
点击可查看 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 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限和管理访问权限。
从源代码部署
如需从源代码进行部署,请执行以下操作:
切换到源代码目录。请注意,源目录不需要使用 Dockerfile,但如果存在 Dockerfile,则将使用它。
构建和部署工作器池:
将gcloud beta run workerpools deploy WORKERPOOL --source .
WORKERPOOL
替换为您要用于工作器池的名称。在系统提示时通过响应
y
来响应任何提示,以安装所需 API。您只需为项目执行一次此操作。如果您尚未按照设置页面中的说明为其他提示设置默认值,请通过提供平台和区域来响应这些提示。等待构建和部署完成。完成后,Cloud Run 会显示一条成功消息。
从源代码自动构建
为了避免本地来源中发生无版本控制的更改,Google 建议您在将更改推送到 Git 代码库时自动部署。为了简化此过程,您可以将持续部署关联到 Cloud Run 工作器池并进行配置。通过将 GitHub 代码库关联到 Cloud Run,您可以配置构建和部署代码库,而无需编写 Dockerfile 或构建文件。
后续步骤
部署 Cloud Run 工作器池后,您可以执行以下操作: