Build Cache

此功能仅在 Incredibuild 的 Enterprise and Business Plans 中可用,且当前的可用性有限。欲了解更多详情,请联系您的客户代表。

概述

Build Cache 可重用先前输出部分,从而节省时间和资源。当您运行构建时,我们将输出存储在文件缓存中。当运行将来构建时,我们需要检查缓存以免重新生成构建部分未进行更改。

这可能会产生重大影响,因为您可以重用存储在本地计算机的先前构建数据,从而在不影响带宽的情况下大幅缩短构建时间。

Build Cache 需要额外的资源,并且具有特定的系统要求

Supported Tools

  • Build Cache 支持使用 msvc 工具集 (cl.exe, link.exe) 的构建,并且与 Visual Studio 2017 及更高版本兼容。

  • 支持 clang-cl.exe 目前是测试版功能。

Build Cache 与 Helper Cache 有什么不同

当 Helper 被赋予一项任务时,他们需要处理的文件被存储在 Helper Cache 中。如果发送的是完全相同的文件,Helper 仍然会再次处理,但文件不需要重新传输。

在 Build Cache 中,Initiator 识别已经处理过的任务,它们被完全跳过(这些文件不需要重新传输,任务不需要重新运行)。

优势和用例

  • 在任何方面提高开发人员的工作效率
    每次切换分支时,停止从头开始运行构建,即使已经构建完成。Build Cache 允许您存储以前的构建数据,并大大减少本地构建时间。

  • 在不影响速度的情况下居家构建
    由于上行带宽有限,居家办公会影响构建速度。Build Cache 允许您更多地依赖下游带宽,在开始新构建时为您提供更快的速度和更好的性能。

  • 在 CI 构建之间使用缓存数据
    使用 Build Cache 与另一个 CI 服务器共享由 CI 服务器生成的构建工件,从而节省时间和资源。为您的 CI 带来增量构建体验。

  • 重用 CI 结果以加快开发构建
    Build Cache 允许开发人员重用在后续的 CI 构建和工作流上生成的输出,即使在处理先前的版本时,而不必合并从版本控制重新启动构建时所做的每一项更改。

Build Cache 客户端、端点和缓存位置

Build Cache 在 Build Cache 端点中存储和管理。Build Cache 端点可以托管在任何 Incredibuild Agent 上。可以访问 Build Cache 的 Initiator Agents 称为 Build Cache 客户端。端点和客户端可以在同一个 Agent 上。

您可以定义客户端是向缓存提供数据,还是仅从缓存中读取数据。

默认情况下,客户端需要定义一个待使用的端点,但如果您想要为此构建使用不同的端点,可以在构建命令中覆盖端点。通过定义标志,您可以在 BuildConsole for Make and Build ToolsBuildConsole for Visual Studio 以及 IBConsole for DevTools CLI 中覆盖构建缓存端点。

例如,如果您正在使用 BuildConsole 命令运行 Incredibuild for make and build tools,您需要添加 /buildcacheserver=[ip address:port] 标志。

默认情况下,Build Cache 端点是 Build Cache 客户端的本地主机。这称为使用本地 Build Cache。

如需实现共享 Build Cache,您需要分配多个客户端来连接到同一个端点。

部署示例

Build Cache 可以不同的方式部署,具体取决于客户端连接到端点的方式。单个客户端可作为自身的端点(本地),多个客户端可连接到单个端点(共享),并且也可以进行更复杂或动态的部署。

Build Cache 的工作原理?

基于代码依赖关系,构建通常以树状结构进行处理。第 1 层的文件被用来创建第 2 层的文件,第 2 层被用来创建第 3 层的文件,以此类推,直到产生最终输出。

随着构建的处理,Incredibuild 会保存流程的细节,以供将来使用。由其他文件产生的每一个部分都作为一对输入文件和输出文件保存在缓存中。如果您在更改一些文件后运行构建,Build Cache 可以使用相同部分来阻止部分进程的运行。

您可以定义 Agent Settings 中的 Agent 是向缓存提供数据,还是仅从缓存中读取数据。但每个端点一次只能处理一个构建中的内容。如果两个构建试图同时写入同一个端点,则只有第一个构建中的内容会添加到缓存中。

文件缓存大小和清理

您可以在 Agent Settings > Build Cache Endpoint > File Cache > Size Limit 设置中为每个端点定义文件缓存大小。大小限制应为将为该文件缓存提供数据的所有构建输出大小的 2-3 倍,但要求可能会因您的环境而异。

文件缓存通过多种方式进行优化,例如删除重复文件和自动清理。如果文件缓存已满,其会通过自动删除约 40% 的内容进行清理。您也可以在 Build Cache 端点的 Agent Settings 中手动清除缓存。

您可以在 Build Monitor 的输出选项卡中查看缓存的使用量,也可以在命令行中查看输出。

如何分配 Build Cache 许可证

必须为每个要使用 Build Cache 的 initiator 分配一个特殊的 Build Cache 许可证。

  1. 转到 Coordinator > Agent List

  2. 选择每个你想启用 Build Cache 的 initiator agent。

  3. 点击Actions >Build Cache License >Allocate License

注意: 你也可以使用每个代理旁边的选项 (...)菜单将许可证分配给单个 initiator。

如何配置 Build Cache 客户端

默认情况下,一旦分配了 Build Cache 许可证,Agent 就会自动配置为 Build Cache 客户端。您可以在 Agent Settings > Build Cache Client > General 选项卡中编辑 Build Cache 客户端设置。

您可以在 Endpoint 字段中定义默认使用的端点。您也可以在构建命令中覆盖该端点以使用不同的端点。

默认情况下,启用 Build Cache 的每个 Agent 既充当客户端又充当提供者(这意味着在客户端上运行的构建被保存为构建缓存的一部分)。如果不希望某个特定 Agent 提供数据,请禁用 Cache Contributor 选项。

作为最佳实践,随时间变化较少的构建从缓存中获得的价值最大,而动态构建获得的价值较小。一般来说,CI 管道应为缓存提供者,开发人员机器应为缓存读取器(禁用缓存提供者)。

您可以使用 Include more details in build output 复选框利更多详细信息来增强命令行和 Build Monitor 中的输出。

如何配置 Build Cache 端点

  1. 在 Initiator 机器上,转到 Agent Settings > Build Cache Endpoint > General 并验证服务当前是否正在运行。

  2. Incredibuild 安装过程中会自动安装一个数据库。如果文件夹需要凭据,请在此处指定。

  3. 定义文件缓存的大小。如果文件夹需要凭据,请在此处指定。

  4. 您也可以在 Coordinator 的 Agent List 中修改文件夹和文件缓存大小。选择一个 Initiator Agent,打开选项菜单,并选择 Build Cache Configuration 。这可以通过选择多个代理并使用 Actions 菜单来大规模地进行。

验证 Build Cache 的有效性

使用 Build Cache 所节省的时间的细节将包含在你所有构建的输出中。这可以在 Build Monitor 的输出选项卡中看到,也可以在命令行中看到输出。

您还可以在 Build Monitor Graphs 中查看信息。

  • 要缓存的任务是已执行的任务,并且是要添加到 Build Cache 中以供将来构建的候选任务。

  • 缓存命中是从 Build Cache 中检索的任务,而非执行的任务。