内容提要
Graphite推出了一款新的CI优化器,帮助快速扩展的公司控制成本和等待时间。优化器允许CI管理员和开发团队有选择地在一组拉取请求的特定部分上运行CI,减少不必要的CI运行。它还可以配置不同的测试套件用于PR创建和合并。CI优化器目前处于私有测试阶段,即将推出公共测试阶段。
延伸解读
堆叠 PR 如何推高 CI 成本
文章指出,采用堆叠 PR 的团队会编写更小的 PR 并交付更多代码,导致 CI 运行次数增加。同时,堆叠 PR 需要不断 rebase 以保持更新,而更新一个 PR 会改变堆叠中所有上层 PR 的 SHA,这可能触发 CI 系统进行完整重建,即使逻辑上代码并未改变。因此,团队需要策略来避免成本膨胀和等待时间增加。
选择性运行 CI 的两种配置方式
CI 优化器允许管理员配置仅在堆叠 PR 的特定部分运行 CI,例如只运行底部 PR 或顶部加底部 PR。由于合并是从底部进入主干,底部 CI 状态始终可知;若想查看整个功能的 CI 状态,可配置自动运行顶部 PR 的 CI 或手动触发。此外,还可以为 PR 创建和合并配置不同的测试套件,例如始终运行 linter,仅在合并前运行端到端测试。
与合并队列批量合并的协同效应
文章提到,合并队列的批量合并功能与 CI 优化器结合使用,能进一步减少不必要的 CI 运行。通常,CI 会在首次推送 PR、更新 PR 以及通过合并队列合并时运行。批量合并将多个 PR 一起合并,减少了合并阶段的 CI 触发次数,而优化器则控制其他阶段的运行,两者共同作用可最大程度降低 CI 成本。
当前可用性与集成方式
CI 优化器目前处于私有测试阶段,仅面向部分企业客户,计划在未来几周内推出公共测试阶段。它支持 Buildkite 和 GitHub Actions 集成。对于 Buildkite,可以创建新的 Graphite 优化器管道来触发原有管道,或在管道开头添加一个作业,让其他作业等待其决定;对于 GitHub Actions,在管道开头添加 optimize_ci 作业,其他作业等待其结果后再运行。
Q&A
Graphite的CI优化器有什么主要功能?
Graphite的CI优化器允许选择性地在一组拉取请求的特定部分上运行CI,减少不必要的CI运行,并支持配置不同的测试套件。
如何使用Graphite的CI优化器来控制CI成本?
通过选择性运行CI和配置不同的测试套件,Graphite的CI优化器帮助公司减少不必要的CI运行,从而控制成本。
Graphite的CI优化器目前处于什么阶段?
CI优化器目前处于私有测试阶段,计划在未来几周内推出公共测试阶段。
CI优化器如何与Buildkite和GitHub Actions集成?
CI优化器通过添加相应的插件或步骤到Buildkite和GitHub Actions的管道中进行集成,优化CI流程。
选择性运行快速和慢速测试的好处是什么?
选择性运行快速和慢速测试可以提高CI效率,确保在合并前只在必要时运行耗时的测试,从而节省时间和资源。
Graphite的合并队列如何与CI优化器结合使用?
合并队列的批量合并功能与CI优化器结合使用,可以进一步减少不必要的CI运行,提高合并效率。