>应用程序包,包含各种应用程序组件,并在版本控制中由各种子树构建
>角色包,将应用程序包组合在一起以不同的配置(应用服务器角色具有公共代码前端,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触发,并限制为在单个代理上运行.它具有对所有角色包的工件依赖性.
当只重建一个角色时,这很有效.但是,当多个角色同时更改时,一旦第一个角色重建,回归测试就会开始运行,然后在该测试完成之前,其他角色不会被接收.我希望回归在重建上次更改的角色时开始运行. (注意:角色的数量多于代理,回归运行在与包构建不同的代理上.)
快照依赖项听起来像我需要的工具……但我的理解是它们强制所有相关配置从相同的VCS版本运行,并且我想避免在其代码未更改时强制重建包.如果今天唯一的变化是在只影响角色R的包中,则不应重建角色S / T / U,也不应重建它们的依赖关系.这可能吗?
编辑:我正在运行TeamCity 7.1.1.
我认为快照依赖与不运行新构建,如果有合适的构建,只使用合适构建的成功构建以及来自同一链集的构建的构件依赖将做你想要的.这种配置应该意味着它看到没有必要重建,因为没有任何改变,请注意它仍然触发构建,但它所做的只是评估没有任何事情可做,所以继续构建链.注意:您没有提到您正在运行的版本,但我认为这在6.5版本中无法正常工作,但在7.1版本中可以正常工作(更优化).