让GitHub CI工作流快3倍

Keerthana Kumar的照片

欢迎来到第一次深度潜水建筑GitHub博客系列,提供了跨越GitHub工程组织的团队如何识别和处理改进我们内部开发工具和基础设施的机会。

在GitHub,我们使用四个关键指标来帮助构建我们的工程基础工作。当我们测量变更的前置时间(代码在生产中成功运行所需的时间)时,我们发现开发人员平均要等45分钟才能完成连续集成套件的成功运行,然后才能合并任何变更。万博足球竞猜app在部署合并分支之前,将再次重复此45分钟的准备时间。最理想的情况是,一名开发人员在签入代码后等了近两个小时,修改才在GitHub.com上发布。这个45分钟的CI现在只需运行15分钟!下面是我们如何让GitHub的CI工作流程快3倍的深入探讨。

分析这个问题

此时此刻,GitHub.com上为数百万开发者提供支持的不朽的Ruby巨石,拥有超过7000个测试套件和超过5000个测试文件。每次提交一个pull请求都会触发25个CI作业,在合并一个pull请求之前需要完成其中的15个CI作业。这意味着GitHub的开发人员在每次提交时要花费大约45分钟和600个核的计算资源。这是大量的开发时间和机器时间,可以用来为我们的客户创造价值。

通过分析CI任务的类型,我们确定了四种类型:单元测试、连接/性能、集成测试、构建/部署。除了两个集成测试作业外,所有作业的运行时间都不到13分钟。这两个集成测试任务是我们进行更改的前置时间中的瓶颈。在大多数DevOps周期中,几个测试套件也是不稳定的。虽然这篇博客文章不打算分享我们是如何解决测试的不稳定的,但是本系列的后续文章将会解释这个过程。除了不稳定之外,这两项集成测试工作还增加了GitHub开发人员之间的摩擦,降低了工作效率。万博足球竞猜app

工程的决定

我们的企业客户使用的GitHub企业服务器,每两周发布一个新的补丁,每季度发布一个主要补丁。这两个长时间运行的测试套件被添加到CI工作流中,以确保pull请求不会破坏我们企业服务器客户的GitHub体验。同样明显的是,这些45分钟的测试套件并没有提供额外的价值来阻止GitHub.com一整天持续不断的部署。受客户痴迷和开发人员满意度的驱动,我们开发了延迟遵从工具。

递延合规

与CI工作流系统集成在一起的延迟遵从工具旨在在改善GitHub.com部署变更的前置时间和为企业服务器质量建立责任之间取得关键的平衡。在合并pull请求之前,不再需要通过长时间运行的CI作业,但是延迟遵从性工具会监视任何测试失败。

如果CI作业失败,则是GitHub问题递延合规创建标签,标记拉请求作者和代码段的代码所有者。将警告消息放在Slack上,到开发人员,72小时计时器被启动。开发人员现在有72小时来修复构建,请按更改或恢复拉动请求。CI作业的成功运行会自动关闭合规性问题,72小时计时器已关闭。如果CI作业保持超过72小时,则禁止所有部署到Github.com,禁止任何特殊情况,直到固定企业服务器的集成测试。这为所有开发人员创造了所有开发人员的责任和所有权,构建在Github.com和企业服务器上完美无瑕的功能。72小时计时器是可定制的,但我们的分析表明,随着一个全球开发人员团队,72小时减少了一个星期五旧金山开发商在旧金山的开发者合并的可能性,并没有无意地阻止在周一在悉尼开发商的部署早上。延期的合规性可以用于任何长时间运行的CI运行,它不需要阻止部署,同时为CI运行故障创建呼叫进行呼叫。

关键的外卖

  • 内部工程工具是支持开发人员的强大资源,同时也为产品一致性提供了保障。万博足球竞猜app
  • 专注于一个关键的度量允许我们识别瓶颈并开发简单和创造性的解决方案。
  • 在过去的决定和客户痴迷中,理解历史背景为我们提供了建立更周到的工程设计的机会。

总的来说,这个项目证明了一个简单的解决方案可以显著提高开发人员的生产力,并且可以对工程组织产生长期的积极影响。万博足球竞猜app当然,因为数字很重要,我们让CI快了3倍。