A long continuous integration (CI) build forces developers to wait for CI feedback before starting subsequent development activities, leading to time wasted. In addition to a variety of build scheduling and test selection heuristics studied in the past, new artifact-based build technologies like Bazel have built-in support for advanced performance optimizations such as parallel build and incremental build (caching of build results). However, little is known about the extent to which new build technologies like Bazel deliver on their promised benefits, especially for long-build duration projects. In this study, we collected 383 Bazel projects from GitHub, then studied their parallel and incremental build usage of Bazel in 4 popular CI services, and compared the results with Maven projects. We conducted 3,500 experiments on 383 Bazel projects and analyzed the build logs of a subset of 70 buildable projects to evaluate the performance impact of Bazel's parallel builds. Additionally, we performed 102,232 experiments on the 70 buildable projects' last 100 commits to evaluate Bazel's incremental build performance. Our results show that 31.23% of Bazel projects adopt a CI service but do not use Bazel in the CI service, while for those who do use Bazel in CI, 27.76% of them use other tools to facilitate Bazel's execution. Compared to sequential builds, the median speedups for long-build duration projects are 2.00x, 3.84x, 7.36x, and 12.80x, at parallelism degrees 2, 4, 8, and 16, respectively, even though, compared to a clean build, applying incremental build achieves a median speedup of 4.22x (with a build system tool-independent CI cache) and 4.71x (with a build system tool-specific cache) for long-build duration projects. Our results provide guidance for developers to improve the usage of Bazel in their projects.
翻译:长时间的持续集成(CI)构建迫使开发者在获得 CI 反馈前等待,从而延误后续开发活动,导致时间浪费。除了过去研究过的多种构建调度与测试选择启发式方法外,Bazel 等基于构件的新型构建技术内置了对并行构建、增量构建(构建结果缓存)等高级性能优化的支持。然而,关于 Bazel 这类新型构建技术能在多大程度上实现其承诺的优势,尤其是针对长构建时长项目,目前尚知之甚少。本研究从 GitHub 收集了 383 个 Bazel 项目,分析了其在四种主流 CI 服务中并行与增量构建的使用情况,并与 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.00 倍、3.84 倍、7.36 倍和 12.80 倍;此外,与全新构建相比,应用增量构建对长构建时长项目可实现 4.22 倍(使用与构建系统工具无关的 CI 缓存)和 4.71 倍(使用与构建系统工具相关的缓存)的中位加速比。本研究结果为开发者改进项目中 Bazel 的使用提供了指导。