Cloud Build 概览

Cloud Build 服务让您在 Google Cloud上执行构建。

Cloud Build 可以从各种代码库或 Cloud Storage 导入源代码,根据您的规范执行构建,并生成诸如 Docker 容器或 Java 归档的工件。 您还可以使用 Cloud Build 来帮助保护您的软件供应链。Cloud Build 功能满足软件制品的供应链等级 (SLSA) 3 级要求。如需有关保护构建流程的指导,请参阅保护构建

构建配置和构建步骤

您可以编写构建配置,以向 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 查看构建结果,也可以转到控制台中 Cloud Build 部分的 构建记录 页面,其中显示了 Cloud Build 执行的每个构建的详细信息和日志。Google Cloud 如需相关说明,请参阅查看构建 结果

构建的工作原理

以下步骤描述了一般而言的 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 创建和管理 构建并可以运行命令来执行 提交构建列出构建取消 构建等任务。

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

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

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

默认池和专用池

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

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

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

构建安全性

Cloud Build 提供了多项功能来保护您的构建,包括:

  • 自动构建

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

    自动构建可在构建步骤中提供一致性。不过,在一致的受信任环境中运行构建也很重要。

    虽然本地构建对于调试目的很有用,但从本地构建发布软件可能会在构建流程中引入许多安全问题、不一致性和低效性。

    • 允许本地构建为恶意 攻击者修改构建流程提供了一种方式。
    • 开发者本地环境和开发者实践中的不一致性 使得重现构建和诊断构建问题变得困难。

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

  • 构建来源

    构建来源是关于构建的一组可验证数据。

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

    生成 build 出处 有助于您:

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

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

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

  • 临时构建环境

    临时环境是指旨在持续 单个构建调用的临时环境。构建完成后,系统会擦除或 删除该环境。临时构建可确保构建服务和构建步骤在 临时环境(例如容器或虚拟机 (VM))中运行。构建服务不会重复使用现有构建环境,而是为每个构建预配一个新环境,然后在构建流程完成后将其销毁。

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

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

  • 部署政策

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

  • 客户管理的加密密钥

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

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

  • 安全性数据分析面板

    Cloud Build 在控制台中包含一个安全性数据分析面板,其中显示了多个安全指标的高级概览。 Google Cloud 您可以使用此面板来识别和缓解 您的构建流程中的风险。

    此面板显示以下信息:

    • 软件制品的供应链等级 (SLSA) 级别: 根据 SLSA 规范确定软件构建流程的成熟度级别。
    • 漏洞:在工件中发现的所有漏洞的概览,以及 Artifact Analysis 扫描的映像的名称。您可以点击映像名称以查看漏洞 详细信息。
    • 构建详细信息:构建的详细信息,例如构建器 以及用于查看日志的链接。
    • 构建来源:构建的来源。

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

后续步骤

  • 阅读 Docker 快速入门, 了解如何使用 Cloud Build 构建 Docker 映像。
  • 了解如何在 Cloud Build 中构建、测试和部署 软件工件
  • 了解不同类型的 Cloud Build 触发器
  • 阅读我们关于 DevOps 的资源,并 了解 DevOps 研究和评估 研究 项目。