再次欢迎,Wayfirt工程爱好者,到我们的虚拟炉边。让自己感到舒适,并在持续整合上进行炉边故事系列的第二部分。如果你没有快乐,请阅读第一部分,在Wayfair的Gitlab Ci的历史。这项分期付款将具有Gitlab Ci的后继者,FiellKite。

你不能淘汰集线器

作为上一个故事的复习,我们已经建立了Gitlab CI,目的是使我们的构建系统更加可维护和稳定。我们的预期与我们所做的实施选择错过,我们需要完全大修我们的系统如何站起来解决问题。

目前的构建系统对普通航空航天店的守则进行了压力。这是大约2018年Cyber​​ 5的共同存在,我们会看到Gitlab完全落下小时一次,每周几天。由于我们的CI系统及其令人难以置信的负载,这会发生这种情况,这阻止了Gitlab能够跟上我们的开发人员产生平均流量的能力。

Gitlab本身就是一个梦幻般的设备。然而,多年的务实选择和技术债务使我们保持不良的情况;以及许多坏事和开发人员不信任。如果我们能够制作开关,我们希望看到Github比目前遇到Gitlab的更多。这将有助于我们获得信任,并将我们的辛劳减少为团队。

这是对我们之间的技术壁垒的急剧简化,我们今天的系统(即,在我们的代码存储库中常常不会发生的生产破坏事件)。我会缩写这个故事,指出与我们最终进入Github和Buildkite相关的重要变化:我们需要大修,或开始新鲜。在这种情况下,在两个版本控制系统之间,我们开始使用github新鲜。

什么错误可能会为较少的主要部署巷脑疼痛奠定基权?

此时,所有PHP,JS,Windows,Python以及一些Java应用程序依赖于Gitlab CI基础架构。我们在各种管道中使用了Jenkins和Octopus进行其他阶段,但Gitlab CI将自己巩固为如何部署和验证代码的关键部分。我们没有为我们在几年内实现的规模建造这一基础设施,或者将其维持作为越来越多的组织的开发者需求发生变化。我们的系统也没有以可重复的方式创建(请参阅:基础架构 - 非代码)。在用户体验领域中,我们通过应用团队不断变化的共享管道的多种问题。当我们考虑这些问题时,我们发现了澳大利亚的公司,build

Buildkite提供了使用他们的SaaS在建立基础架构前端的能力,这些问题可以减轻我们基础架构减慢了检查构建的能力并验证我们的代码的问题。Buildkite还提供了测试空间中独特的东西,动态管道。为了大幅过度简化,动态管道允许我们在飞行器中开始做出决定,以便在管道中执行什么。因此,我们没有在.mml文件中的线条数百或数千(是),以创建我们的生产构建管道。我们可以在知道我们需要时,以编程方式发送构建,测试和/或部署自动化的某些步骤。

我们还发现特别令人兴奋:Firstkite有一个开源代理(立即用于成为我们的Gitrunders的东西),我们用来从我们的Wayfirt开发人员接受工作。我们可以根据需要进行调整和错误修复支持的用例,并使Wayfair有点吸引人开源存在。除了对代理程序本身进行修改外,我们还能够为CompereKite插件做出贡献:可重复使用的功能,可以为Wayfair特定情况创建,并回馈GitHub上的更广泛的社区。我们也有能力钩子,小型脚本我们可以嵌入在大大简化我们到位的过程中,以防止基础设施稳定,可重复和可靠的过程。

最戏剧性地,我们与Gitlab学到的,我们需要从开发团队的支持运营团队为我们的管道实现和维持稳定的基础设施。我们有专门的资源(就像我自己!)调查和声称对我们可以从Gitlab CI的改进的所有权,从Giitlab CI改进到Buildkite。我们掀起开始使用Infra,为我们如何与开发人员团队合作提供基础。

优化和定义标题和副线管道指南和限制

如上所述和在上一篇文章中,Gitlab CI代理商并不总是以可复制的方式组合在一起。我们没有一个地方来寻找所有依赖性和预期的代理商使用。有意改变西全的;我们聚集了我们对Gitlab CI基础设施的知识。我们的基础知识是,我们肯定需要协调自己和网络和安全等自由队。我们希望确保我们已经完全了解问题,以至于我们不会再重复它并继续新的Infra要求的周期。我们确定了几个参数,我们预期的实现:

  • 我们需要几个队列来避免将“每个代理商的一切”施加
    • PHP.
    • javascript.
    • Windows(Dotnet)
    • 默认值(没有管道上传步骤的依赖项)
    • “实验”队列的工作流程我们无法预测(Docker成为我们去实验的名字+技术,现在是最大的队列!)
  • 我们需要一种存储不是GCP或S3的工件的方法
    • 您中的一些人可能知道现在我们确实依赖GCP来存储工件。当时,我们没有使用GCP进行Cuttykite工件,与此后的安全问题有关。
  • 我们需要Windows代理商

这不是我们的详尽清单,但这些是最有趣的起点。我们建立了开源,我bob网下载们发出标准,我们与各个团队合作,以确保所有单位的管道特定所有权。设置寻呼机,呼叫,获取基础架构权限,以推动我们自己的前进,编写WOC Runkbooks,并在整个组织上进行合作;我们达到了拟处从Gitlab接管的FirstKite基础架构的第一个版本。

此时,Gitlab正在服用(在美好的一天)至少半小时才能运行所有测试进入集成商。大多数时候,它超过一个小时,你必须多次运行它们。更糟糕的是,当它到达集成商时,他们必须再次运行。我们决定我们需要一个更好的系统,PHP平台将一种方法拉动使用动态管道运行动态测试套件。这是一个奇特的方式,我们将它们倒入10的序列,因此每次需要3-5分钟,而不是每次连续运行所有35万检验。

我们还注意到,许多单位测试都达到了外部服务,这使得结果不可预测。这不是单位测试的目的,所以我们做了大量审计和跳过我们的单位测试。我们跳过大约20%的测试,然后将剩下的容器放入无法到达外界的容器,以确保问题无法再次复制。我们预计的重大改善,但这实际上消除了我们预计我们的单位测试期望的典型片状。任何预期伸出的测试都会不断失败,不会将其进入大师分支机构!

通过可靠的基础设施和旋转来维持它,所有这些都是可能的。随着我们继续作为一个组织和CI战略的成长,我们不断炼制基本的需求以及我们需要做些什么,以确保我们为该组织提供服务。

进入未来

作为一个型材建设者之一,看看平台来了多远。我们继续提高开发WebStack的过程,使我们的开发人员更加容易。Wayfair的许多工程师都依赖于西班牙,并且有一天我们希望使新工程师作为细节将其视为细节。我们永远不会完全完成,但看到应用程序开发过程中许多痛苦的部分甚至从去年以来,这么多痛苦的部分感觉很好。

我很高兴你花了你的一天才能通过这个历史阅读,并欣赏在Wayfair的旅程中分享这一章的机会。请与任何问题或更正联系gwhite@wayfair.com- 我们很高兴收到您的来信。