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.17。

Cloud Build 接口

您可以将 Cloud Build 与 Google Cloud 控制台、gcloud 命令行工具或 Cloud Build 的 REST API 搭配使用。

在 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 的命令。Cloud Build 使用构建配置文件向 Cloud Build 提供构建步骤。

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

    虽然本地 build 有助于进行调试,但从本地 build 发布软件可能会给构建流程带来很多安全问题、不一致和低效问题。

    • 允许本地构建可让恶意攻击者修改构建流程。
    • 开发者本地环境和开发者实践不一致会导致难以重现 build 和诊断 build 问题。

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

  • 构建出处

    build 出处是关于 build 的可验证数据的集合。

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

    生成构建出处有助于您:

    • 验证构建工件是否是从可信来源位置以及由可信构建系统创建的。
    • 找出从不可信的来源位置或构建系统注入的代码。

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

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

  • 临时构建环境

    临时环境是专用于单次 build 调用的临时环境。构建完成后,系统会擦除或删除环境。临时构建可确保构建服务和构建步骤在容器或虚拟机等临时环境中运行。构建服务不会重复使用现有的构建环境,而是会为每个构建预配一个新的环境,然后在构建流程完成后销毁该环境。

    临时环境可确保 build 整洁,因为之前 build 中没有会干扰构建流程的残留文件或环境设置。非临时环境为攻击者提供了注入恶意文件和内容的机会。临时环境还可以降低维护开销并减少构建环境中的不一致问题。

    Cloud Build 会为每个构建设置一个新的虚拟机环境,并在构建后销毁该环境。

  • 部署政策

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

  • 客户管理的加密密钥

    默认情况下,Cloud Build 提供客户管理的加密密钥 (CMEK) 合规性。用户无需进行任何专门配置。Cloud Build 使用为每个构建生成的临时密钥加密构建时永久性磁盘 (PD),以保证 CMEK 的合规性。系统会为每个 build 生成具有唯一性的密钥。

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

  • 安全性数据分析面板

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

    此面板会显示以下信息:

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

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

    • 构建详情:构建详情,例如构建器和用于查看日志的链接。

    • 构建出处:构建的出处。

  • Software Delivery Shield

    Cloud Build 是 Software Delivery Shield 解决方案的一部分。Software Delivery Shield 是一种全代管式端到端软件供应链安全解决方案,可帮助您改善开发者工作流和工具、软件依赖项、用于构建和部署软件的 CI/CD 系统以及运行时环境(如 Google Kubernetes Engine 和 Cloud Run)的安全状况。如需了解如何将 Cloud Build 与 Software Delivery Shield 的其他组件结合使用,以改善软件供应链的安全状况,请参阅 Software Delivery Shield 概览

后续步骤