设置构建工作器池(源部署)

将源代码部署到 Cloud Run 时,该源代码会存储在 Cloud Storage 存储桶中。Cloud Build 随后会自动将您的代码构建到容器映像中,并将该映像推送到映像注册表。每个构建都在其自己的工作器上运行。Cloud Run 会在部署时导入构建的映像。

如果要自定义 Cloud Build 用于 VPC Service Controls 保护的构建上下文的构建工作器池,您可以自定义工作器池。本页面适用于使用 Google Cloud CLI 从源代码部署 Cloud Run 服务函数以及配置 Cloud Build 所使用的专用池的平台开发者。源代码部署 (--source) 支持 build 工作器池 gcloud CLI 标志,容器映像部署 (--image) 则不支持。

准备工作

  • 启用 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 客户端库)进行交互,请参阅服务身份配置指南。如需详细了解如何授予角色,请参阅部署权限管理访问权限

使用专用池保护构建

默认情况下,Cloud Build 在构建过程中具有不受限制的互联网访问权限。如果您已设置 VPC Service Controls (VPC SC) 边界,并且希望限制构建仅可访问存储在边界内的依赖项(例如 npm 软件包),则可以使用 Cloud Build 专用工作器池功能。

一般来说,请按照以下步骤设置您的专用池:

  1. 创建专用工作器池。 请参阅创建和管理专用池
  2. 配置 VPC Service Controls 边界。 请参阅使用 VPC Service Controls

  3. 如果专用工作器池与 Cloud Run 服务位于不同的项目中,则需要为 Cloud Run Service Agent (service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com) 授予 Cloud Build WorkerPool User (cloudbuild.workerPoolUser) 角色,以便 Cloud Build 服务可以访问工作器池。

    gcloud projects add-iam-policy-binding PRIVATE_POOL_PROJECT_ID \
        --member serviceAccount:service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com \
        --role roles/cloudbuild.workerPoolUser

    您需要进行如下替换:

    • PROJECT_NUMBER 替换为在其中运行服务的项目的编号。
    • PRIVATE_POOL_PROJECT_ID 替换为工作器池所在项目的 ID。如需了解详情,请参阅在专用池中运行构建
  4. 从源代码部署服务以使用专用池进行构建:

    gcloud

    如需在从源代码部署时指定要构建的专用池,请使用 --build-worker-pool 标志:

    gcloud run deploy SERVICE \
        --source . \
        --build-worker-pool WORKER_POOL

    您需要进行如下替换:

    • SERVICE 替换为您的服务名称。
    • WORKER_POOL 替换为专用池的名称。

    如果您要部署函数,请从源代码将 --function 标志与函数入口点一起添加。

删除构建工作器池

您可以删除现有服务的构建工作器池。

gcloud

如需清除源代码部署的 Cloud Build 工作器池,请使用 --clear-build-worker-pool 标志:

gcloud run deploy SERVICE \
    --source . \
    --clear-build-worker-pool WORKER_POOL

您需要进行如下替换:

  • SERVICE 替换为您的服务名称。
  • WORKER_POOL 替换为您要删除的专用池的名称。

如果您要部署函数,请从源代码将 --function 标志与函数入口点一起添加。