Cloud Build 概览

Cloud Build 是一项可在 Google Cloud上执行构建的服务。

Cloud Build 可以从各种代码库或云存储空间导入源代码,根据您的规范执行构建,并生成诸如 Docker 容器或 Java 归档的软件工件。

您还可以使用 Cloud Build 来帮助保护软件供应链。Cloud Build 功能符合软件工件的供应链 (SLSA) 级别 3 的要求。如需有关保护构建流程的指导,请参阅保护 build

构建配置和构建步骤

您可以编写构建配置,以向 Cloud Build 提供有关执行什么任务的说明。可以将构建配置为提取依赖项,运行单元测试、静态分析和集成测试,并使用 docker、gradle、maven、bazel 和 gulp 等构建工具创建软件工件。

Cloud Build 将构建作为一系列构建步骤执行,其中的每个构建步骤都在 Docker 容器中运行。执行构建步骤类似于在脚本中执行命令。

您可以使用 Cloud Build 和 Cloud Build 社区提供的构建步骤,也可以编写自己的自定义构建步骤:

每个构建步骤都通过其连接到本地 Docker 网络(名为 cloudbuild)的容器运行。这使构建步骤可以相互通信并共享数据。如需详细了解 cloudbuild 网络,请参阅 Cloud Build 网络

您可以在 Cloud Build 中使用标准 Docker Hub 映像,例如 UbuntuGradle

启动构建

您可以使用 Google Cloud CLI 或 Cloud Build API 在 Cloud Build 中手动启动构建,也可以使用 Cloud Build 的构建触发器功能,创建为响应代码更改而启动新构建的自动持续集成/持续交付 (CI/CD) 工作流。

您可以将构建触发器与许多代码库(包括 Cloud Source Repositories、GitHub、Bitbucket)集成在一起。

查看构建结果

您可以使用 gcloud CLI、Cloud Build API 或使用 Google Cloud 控制台的 Cloud Build 部分中的构建记录页面查看构建结果,该页面会显示 Cloud Build 执行的每个构建的详细信息和日志。如需相关说明,请参阅查看构建结果

构建的工作原理

以下步骤描述了一般而言的 Cloud Build 构建生命周期:

  1. 准备应用代码及任何所需资源。
  2. 创建 YAML 或 JSON 格式的构建配置文件,其中包含 Cloud Build 的说明。
  3. 将构建提交到 Cloud Build。
  4. Cloud Build 根据您提供的构建配置执行构建。
  5. 如果适用,构建的任何工件都会推送到 Artifact Registry

Docker

Cloud Build 使用 Docker 执行构建。对于每个构建步骤,Cloud Build 都会将 Docker 容器作为 docker run 的实例执行。目前,Cloud Build 运行的是 Docker 引擎版本 20.10.24。

Cloud Build 接口

您可以通过 Google Cloud 控制台、gcloud 命令行工具或 Cloud Build 的 REST API 使用 Cloud Build。

在 Google Cloud 控制台中,您可以通过构建记录页面查看 Cloud Build 构建结果,并通过构建触发器进行自动构建

您可以使用 gcloud CLI 创建和管理 build。并可以运行命令来执行提交构建列出构建取消构建等任务。

您可以使用 Cloud Build REST API 请求构建。

与其他 Cloud Platform API 一样,您必须使用 OAuth2 授予访问权限。获得访问授权后,您可以使用 API 启动新构建、查看构建状态和详情、列出每个项目的构建并取消当前正在进行的构建。

如需了解详情,请参阅 API 文档

默认池和专用池

默认情况下,当您在 Cloud Build 上运行构建时,该构建在可访问公共互联网的安全托管环境中运行。每个构建都在其自己的工作器上运行,并与其他工作负载隔离。您可以通过多种方式自定义构建,包括增加机器类型的大小或分配更多磁盘空间。默认池对环境的可自定义程度有限制,特别是对于专用网络访问权限。

专用池是专用的私有工作器池,允许您对构建环境进行更多自定义,包括访问专用网络中的资源的功能。与默认池类似,专用池由 Cloud Build 托管和完全代管,并可以扩容和缩容至零,无需设置、升级或扩缩基础架构。由于专用池是客户专用的资源,因此您可以通过更多方式对其进行配置。

如需详细了解专用池以及默认池和专用池之间的功能差异,请参阅专用池概览

构建安全

Cloud Build 提供了多项功能来确保 build 的安全,包括:

  • 自动构建

    自动化 build 或脚本化 build 会在 build 脚本或 build 配置中定义所有 build 步骤,包括检索源代码的步骤和构建代码的步骤。唯一的手动命令(如果有)是运行 build 的命令。Cloud Build 使用构建配置文件向 Cloud Build 提供构建步骤。

    自动化构建可确保构建步骤的一致性。不过,在一致且可信的环境中运行 build 也很重要。

    虽然本地 build 在调试方面很有用,但通过本地 build 发布软件可能会在构建流程中引入许多安全问题、不一致性和低效率。

    • 允许本地构建会为有恶意意图的攻击者提供修改构建流程的方法。
    • 开发者本地环境和开发者做法不一致,导致很难重现 build 并诊断 build 问题。

    SLSA 框架的要求中,SLSA 级别 1 要求使用自动化构建,SLSA 级别 2 要求使用构建服务(而非开发者环境)进行构建。

  • 构建来源

    构建来源是关于 build 的可验证数据的集合。

    来源元数据包括已构建映像的摘要、输入源位置、构建工具链和构建时长等详细信息。

    生成 build 来源有助于您:

    • 验证构建的工件是否是从可信来源位置通过可信构建系统创建的。
    • 识别从不可信的来源位置或构建系统注入的代码。

    您可以使用提醒和政策机制主动使用 build 来源数据。例如,您可以创建仅允许部署从经过验证的来源构建的代码的政策。

    Cloud Build 可以为提供 SLSA 3 级保证的容器映像生成构建来源。如需了解详情,请参阅查看 build 来源

  • 短暂构建环境

    短暂环境是指仅在单次 build 调用期间有效的临时环境。构建完成后,系统会清除或删除环境。临时 build 可确保 build 服务和 build 步骤在临时环境(例如容器或虚拟机)中运行。构建服务不会重复使用现有构建环境,而是为每个 build 预配一个新环境,并在构建流程完成后销毁该环境。

    临时环境可确保构建干净无杂,因为之前的构建中没有任何可能干扰构建流程的残留文件或环境设置。非短暂环境为攻击者注入恶意文件和内容提供了机会。临时环境还可以减少维护开销,并减少构建环境中的不一致性。

    Cloud Build 会为每个 build 设置新的虚拟机环境,并在 build 完成后销毁该环境。

  • 部署政策

    您可以将 Cloud Build 与 Binary Authorization 集成,以检查 build 证明并阻止部署并非由 Cloud Build 生成的映像。此过程可以降低部署未经授权的软件的风险。

  • 客户管理的加密密钥

    Cloud Build 默认提供客户管理的加密密钥 (CMEK) 合规性。用户无需专门配置任何内容。Cloud Build 通过使用为每个 build 生成的临时密钥加密构建时永久性磁盘 (PD),来提供 CMEK 合规性。该密钥是针对每个 build 生成的唯一密钥。

    构建完成后,系统就会从内存中擦除并销毁该密钥。该密钥不会存储在任何位置,就连 Google 工程师或支持人员也无法访问,并且无法恢复。使用此类密钥保护的数据将永久无法访问。如需了解详情,请参阅 Cloud Build 中的 CMEK 合规性

  • “安全性数据分析”面板

    Cloud Build 在 Google Cloud 控制台中提供了一个安全分析面板,用于简要显示多个安全指标。您可以使用此面板来识别和降低构建过程中的风险。

    此面板会显示以下信息:

    • 软件工件的供应链 (SLSA) 级别:根据 SLSA 规范标识软件构建流程的成熟度级别。

    • 漏洞:在工件中发现的所有漏洞的概览,以及 Artifact Analysis 扫描的映像的名称。您可以点击映像名称以查看漏洞详细信息。例如,在屏幕截图中,您可以点击 java-guestbook-backend

    • 构建详情:构建的详细信息,例如构建器以及用于查看日志的链接。

    • build 出处:build 的来源。

如需了解如何将 Cloud Build 与其他 Google Cloud 产品和功能结合使用来保护软件供应链,请参阅软件供应链安全

后续步骤