如何使TeamCity构建等到重建所有工件依赖项?

时间:2012-12-04 20:55:40

标签: dependencies teamcity teamcity-7.1

我有一个TeamCity项目,其中包含几种类型的构建配置:

  • 应用程序包,包含各种应用程序组件,并在版本控制中使用各种子树构建
  • 角色包,将应用程序包组合在一起以不同的配置(应用服务器角色具有通用代码+前端,Web服务角色具有通用代码+后端等)。
  • 回归测试,一系列构建步骤,在相应的测试服务器上部署角色包并运行冗长的Selenium测试套件

目标是经常构建应用程序包,以便我们立即知道单元测试何时中断,根据需要构建角色包,以及在有新角色包时尽可能频繁地运行回归测试去测试。但是,由于回归测试需要很长时间,并且一次只能运行一个回归(它独占测试服务器集),我们总是希望它能够获取最新的可用包。开始跑步例如:

3:00 code checked in
3:01 build app package (A1)
3:02 app package A1 finishes
3:02 build role package (R1)
3:03 role package R1 finishes

3:04 regression starts for R1

3:10 code checked in
3:11 build app package (A2)
3:12 app package A2 finishes
3:12 build role package (R2)
3:13 role package R2 finishes

3:20 code checked in
3:21 build app package (A3)
3:22 app package A3 finishes
3:22 build role package (R3)
3:23 role package R3 finishes

3:30 regression finishes for R1
** regression never runs for R2 **
3:30 regression starts for R3

到目前为止,我已经使用工件依赖项和构建触发器来实现它:

  • 应用程序包由计划触发器触发,仅限于具有VCS触发器规则的相关源代码。他们没有TeamCity依赖。
  • 角色包由指向所有相关应用程序包的Finish Build Triggers触发。每个都对相关的应用程序包(上次成功构建)具有工件依赖性。
  • 回归测试由指向所有角色包的Finish Build Triggers触发,并限制为在单个代理上运行。它对所有角色包都有工件依赖。

当只重建一个角色时,这非常有效。但是,当多个角色同时更改时,一旦第一个角色重建,回归测试就会开始运行,然后在该测试完成之前,其他角色不会被接收。我希望在重建 last 更改角色时开始运行回归。 (注意:角色比代理更多,回归运行在与包构建不同的代理上。)

快照依赖项听起来像我需要的工具......但我的理解是它们强制所有相关配置从相同的VCS版本运行,并且我想避免在其代码未更改时强制重建包。如果今天唯一的变化是在只影响角色R的包中,则不应重建角色S / T / U,也不应重建它们的依赖关系。这可能吗?


编辑:我正在运行TeamCity 7.1.1。

1 个答案:

答案 0 :(得分:1)

我认为使用Do not run new build if there is a suitable oneOnly use successful builds from suitable ones的快照依赖项以及设置为build from the same chain的工件依赖项将实现您想要的效果。这个配置应该意味着它看到没有必要重建,因为没有任何改变,请注意它仍然触发构建,但它所做的就是评估没有任何事情要做,所以继续使用构建链。

注意:您没有提到您正在运行的版本,但我认为这在6.5版本中无法正常工作,但在7.1版本中可以正常工作(更优化)。