防止在Teamcity上发生不必要的触发器

时间:2015-03-16 08:32:50

标签: teamcity teamcity-7.0

我在问题和答案上搜索了我的问题。我可以找到一个与我的问题相同的问题,但是,遗憾的是,它没有得到回答。

Prevent Excessive Builds in TeamCity

对于许多依赖项,我有很多模块和相同的情况。

简化;

我有X,Y,Z模块和依赖关系:Z-> Y-> X

当代码提交给X模块时,X1开始运行。

当X1完成时,Y模块被触发,Y1开始运行。

当Y1完成时,Z模块被触发,Z1开始运行。

当Z1运行时,提交给Y和Y2的代码开始运行。

此时,由于Z2将在Y2完成后立即触发,因此Z1构建将变得不必要。因为Z2比较新,必须使用Z2。

另一方面,模块依赖于Z将被不必要地触发(当Z1完成时),因为Z2将在Z2完成时触发相同的模块。

我检查了Teamcity文档;还有论坛。我认为这种情况并不罕见,但无法找到答案或解决方案。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我理解这种痛苦,但我认为这种方法的工作方式对于将问题构建正确地映射到提示它们的代码更改是必要的。例如,如果Z1成功完成并且其中有5个更改,但Z2失败并且还有3个更改,则您不一定希望Z1中的代码与失败的构建相关联。

如果构建需要花费足够长的时间或花费您不想花费的计算资源,您可能会考虑取消Z1构建,我不知道内置机制,但您可以编写自己的插件或可能通过构建步骤编写脚本

团队城市中的其他API提供了一些处理此问题的方法,您可以看到更多here

答案 1 :(得分:0)

  1. 如果您在teamcity中设置依赖项,则会设置静默期。如果您办理登机手续并且有5分钟的静默期,团队城市将等待5分钟,然后才开始建造。如果您的提交在短时间内发生,您可以使用slient period选项。但是,如果您的团队中的提交频繁,则无法解决您的问题。

  2. 你也可以使用"合适的版本"如果项目中的提交频繁,则依赖项中的选项。我建议你在https://confluence.jetbrains.com/display/TCD8/Snapshot+Dependencies阅读,以便更好地了解它,看它是否适合你的要求。

  3. 你的构建速度是否快,在这种情况下我实际上不会在运行X2-> Y2-> Z2之前看到X1-Y1-Z1完成。原因是,如果运行快照依赖项,则更容易识别Z1中的提交是否破坏了构建或Z2中的提交。如果您将Z1和Z2作为同一构建的一部分运行,那么找出哪个单独的提交开始导致构建问题会变得更加困难和耗时

  4. 修改

    我们通常在X1-> Z1时遇到此问题。在我们的例子中,X1运行速度超快,而Z1需要花费大量时间。在这种情况下,teamcity做的是,如果有X2,它就不会运行Z1。它立即从Z2开始。我们使用快照依赖关系和构建链来实现它。

    2个问题

    1. 你的所有构建都是超级快还是需要时间。
    2. 您的所有构建版本是否来自不同的repos / sub-repos,或者它们是否运行完全相同的回购。
    3. 您可以执行的一个简单的操作是在构建X中为所有构建版本编号,将其写入文件或teamcity属性并通过X1-Y1-Z1传播它们(您可以使用依赖构建中的参数传播它们)。对于Y和Z中的每个构建,您可以检查X是否已移至更高版本。

      对于x考虑这种情况, 1.如果您的X1版本是v1.1并且您的Y1完成并且现在Z1开始运行。 2.同时X2已经完成运行,新版本为1.2 3.在目标Z2中,您可以检查新版本是否为1.2,并且由于您在v1.1上运行,因此您完全跳过了运行(我将根据您的要求让您决定是跳过还是错误)

      如果您可以选择在每次提交时构建X1,您甚至可以在Y1目标

      中执行此操作