使用CI在隔离中构建相互依赖的项目

时间:2018-04-30 14:29:34

标签: continuous-integration

所以,我有一个有趣的情况。我有一个小组有兴趣使用CI来帮助捕获开发人员错误。太棒了 - 我们都是为了那个。我围绕着事物的问题是他们想要建立彼此隔离的相互依赖的项目。

例如,我们有一个包含多个项目的公共/共享库的解决方案,其中一些项目依赖于解决方案中的其他项目。我希望如果有人向解决方案中的某个项目提交更改,CI服务器将尝试构建解决方案。毕竟,解决方案知道依赖关系并将以正确的顺序构建优化的东西。

相反,他们已经打破了每个项目,并试图独立构建它们,而不考虑依赖性。这会导致其他错误,因为依赖的DLL可能尚不存在(!),并且如果在两个或更多项目中进行了相关更改,则可能存在鸡与蛋问题。

这导致大量关于破坏版本的电子邮件(每个项目一个),即使最后一组更改没有真正破坏任何东西!当我提出这个问题时,我被告知这是一个已知问题,CI服务器会“重建几次以解决依赖问题!”

这听起来像是做构建CI的低音方式。但也许这是因为我年纪大了,对新趋势一无所知 - 所以,正如任何人都知道CI设置独立建立相互依存的项目一样?有什么好的理由?

哦,他们希望我们使用CI流程的构建输出,并且每个构建的DLL都可能获得不同的版本号。因此,我们不再为所有相关DLL的输出提供单个版本号。我们可以确定的最好的东西是在特定的日历日建立的。

我似乎无法让他们相信这是 A Bad Thing 。 那么,我在这里错过了什么?

谢谢!

和平!

1 个答案:

答案 0 :(得分:1)

我赞同你的意见。

与实际问题相比,您可能会花费更多时间处理不必要的噪音。重复部分CI验证管道只会延长整个CI执行时间,这违背了减少反馈循环的CI目标。

如果有的话,你应该尝试在同一个CI保护伞下尽可能多地提供相关项目(理想情况下都是这些项目),以最大限度地发挥整个系统任何部分的破损/回归快速反馈的好处。 / p>

就我个人而言,我还提倡使用门控CI系统(基于预先提交验证)来防止回归,而不仅仅是检测它们,并依靠人为干预进行修复。