我正在尝试在 TeamCity 6 中配置一组构建配置,并尝试以 TeamCity 启用的最简洁的方式对特定需求进行建模。
我有一组验收测试(大约 4-8 套测试,按它们所属的系统功能区域分组)我希望并行运行(我将它们建模为构建配置,以便它们可以分布在一个一组代理)。
从我最初的研究来看,似乎拥有一个通过快照依赖AcceptanceTests
项引入一组单独的验收测试配置的元构建配置应该可以解决问题。然后我所要做的就是说我的构建配置应该触发并且它们都会被拉入。所以,假设我也有,并且Commit
AcceptanceTests
AcceptanceSuiteA
AcceptanceSuiteB
AcceptanceSuiteC
到目前为止,一切都很好(我知道我也可以反过来让Commit
配置触发AcceptanceSuiteA
,AcceptanceSuiteB
并且AcceptanceSuiteC
- 问题是我需要手动汇总结果以确定整个验收测试的整体成功)。
复杂的一点是,虽然AcceptanceSuiteC
只需要一些Commit
工件,然后就可以自己生活,AcceptanceSuiteA
并且AcceptanceSuiteB
需要:
DeploySite
(假设这需要 2 分钟,而我不能为此运行一个完全隔离的设备)- 针对已部署的站点运行测试
问题是我需要能够确保:
- 该网站只配置一次
- 两个套件运行时网站不会被破坏
如果我设置DeploySite
为构建配置并将AcceptanceSuiteA
其AcceptanceSuiteB
作为快照依赖项拉入,AFAICT:
- 随后或并行运行
AcceptanceSuiteB
可能会触发另一个DeploySite
,这将破坏AcceptanceSuiteA
和/或AcceptanceSuiteB
正在使用的部署。
虽然我可以说限制同时运行的构建的数量以强制一次只发生一个,但我需要一次有一个,而不是在依赖的部分仍在运行时。
TeamCity 中有没有办法对这种层次结构进行建模?
编辑:想法:-
一个废话解决方案是DeploySite
可以设置一个“使用中标志”标记,然后让AcceptanceTests
配置清除该标志[在完成之后] AcceptanceSuiteA
。AcceptanceSuiteB
然后问题就变成了让下一个DeploySite
管道等待直到再次打开所述门(在构建中进行阻塞等待,感觉不对 - 我希望它被标记为“尚未开始”而不是看起来像花了很长时间做某事)。然而,这种东西在这里有一个标志,并有这个位检查它是我试图摆脱的那种可变状态/片状气味。
编辑 2:如果我可以以编程方式更改代理配置,我可以将代理要求设置为要求InUse=false,然后在部署开始时设置标志并在测试运行后清除它