使用 Bazel 是否有助于加速持续集成构建?
软件工程
2024-10-15 v1
摘要
漫长的持续集成 (CI) 构建迫使开发者在开始后续开发活动前等待 CI 反馈,导致时间浪费。除了过去研究的各种构建调度和测试选择启发式方法外,像 Bazel 这样的新型基于制品的构建技术内置了对并行构建和增量构建(构建结果缓存)等高级性能优化的支持。然而,对于 Bazel 等新型构建技术在多大程度上能兑现其承诺的收益,尤其是对于长构建周期的项目,目前知之甚少。在本研究中,我们从 GitHub 收集了 383 个 Bazel 项目,然后在 4 个流行的 CI 服务中研究了它们对 Bazel 并行和增量构建的使用情况,并将结果与 Maven 项目进行了比较。我们在 383 个 Bazel 项目上进行了 3,500 次实验,并分析了其中 70 个可构建项目的子集的构建日志,以评估 Bazel 并行构建对性能的影响。此外,我们对这 70 个可构建项目的最近 100 次提交进行了 102,232 次实验,以评估 Bazel 的增量构建性能。我们的结果显示,31.23% 的 Bazel 项目采用了 CI 服务,但并未在 CI 服务中使用 Bazel;而对于那些确实在 CI 中使用 Bazel 的项目,其中 27.76% 使用了其他工具来辅助 Bazel 的执行。与顺序构建相比,长构建周期项目在并行度分别为 2、4、8 和 16 时的中位加速比分别为 2.00x、3.84x、7.36x 和 12.80x;而与干净构建相比,应用增量构建在长构建周期项目中实现了 4.22x 的中位加速比(使用与构建系统工具无关的 CI 缓存)和 4.71x 的中位加速比(使用特定于构建系统工具的缓存)。我们的结果为开发者改善 Bazel 在其项目中的使用提供了指导。
引用
@article{arxiv.2405.00796,
title = {Does Using Bazel Help Speed Up Continuous Integration Builds?},
author = {Shenyu Zheng and Bram Adams and Ahmed E. Hassan},
journal= {arXiv preprint arXiv:2405.00796},
year = {2024}
}