Msbuild TeamCity:管理验收测试的部署依赖项?

Msbuild TeamCity:管理验收测试的部署依赖项?,msbuild,teamcity,acceptance-testing,automated-deploy,Msbuild,Teamcity,Acceptance Testing,Automated Deploy,我正在尝试在TeamCity 6中配置一组构建配置,并尝试以TeamCity支持的最干净的方式对特定需求建模 我有一套验收测试(大约4-8套测试,按它们所属系统的功能区域分组),我希望并行运行(我将把它们建模为构建配置,以便它们可以分布在一组代理中) 从我最初的研究来看,似乎有一个AcceptanceTestsmeta-build配置,可以通过一组单独的验收测试配置来实现这一点。然后我要做的就是说我的Commitbuild配置应该触发AcceptanceTests,它们都会被拉进来。因此,假设我

我正在尝试在TeamCity 6中配置一组构建配置,并尝试以TeamCity支持的最干净的方式对特定需求建模

我有一套验收测试(大约4-8套测试,按它们所属系统的功能区域分组),我希望并行运行(我将把它们建模为构建配置,以便它们可以分布在一组代理中)

从我最初的研究来看,似乎有一个
AcceptanceTests
meta-build配置,可以通过一组单独的验收测试配置来实现这一点。然后我要做的就是说我的
Commit
build配置应该触发
AcceptanceTests
,它们都会被拉进来。因此,假设我还有
AcceptanceSuiteA
AcceptanceSuiteB
AcceptanceSuiteC

到目前为止,一切都很好(我知道我也可以用另一种方式来改变它,并导致
Commit
config触发
AcceptanceSuiteA
AcceptanceSuiteB
AcceptanceSuiteC
——问题是我需要手动汇总结果,以确定验收测试的整体成功率)

复杂的一点是,
AcceptanceSuiteC
只需要一些
Commit
工件就可以独立生存,
AcceptanceSuiteA
AcceptanceSuiteB
需要:

  • DeploySite
    (假设需要2分钟,我无法为这次运行启动一个完全隔离的站点)
  • 对部署的站点运行测试
问题是我需要能够确保:

  • 该网站只配置一次
  • 当这两个套件运行时,网站不会遭到破坏
如果我将
DeploySite
设置为构建配置,并将
AcceptanceSuiteA
AcceptanceSuiteB
作为快照依赖项拉入,AFAICT:

  • 后续的或并行运行的<代码> Access StuteSueTeB/COD>可能触发另一个<代码>部署站点,这将阻塞部署:<代码> Access StuteSueTe>代码>和/或<代码> Access StutueBe>代码>在使用中。
虽然我可以说限制同时运行的构建的数量,以强制一次只发生一个构建,但我需要一次有一个构建,而不是在依赖部分仍在运行时

TeamCity是否有办法对这样的层级结构进行建模

编辑:想法:-

crap解决方案是,
DeploySite
可以设置一个“使用中标志”标记,然后让
AcceptanceTests
config清除该标志[在
AcceptanceSuiteA
AcceptanceSuiteB
完成后]。然后,问题就变成了让下一个
DeploySite
在管道中等待,直到所说的门再次打开(在构建中执行阻塞等待,感觉不对劲——我希望它被标记为“尚未启动”,而不是看起来需要很长时间才能完成某件事情)。然而,这类东西在这里有一个标志,让我们检查一下,这是我试图摆脱的那种可变状态/片状气味

编辑2:如果我可以通过编程方式更改代理配置,我可以设置为require InUse=false,然后在部署启动时设置标志,并在测试运行后清除标志。您可以先查看,然后记住在搜索中使用神奇的单词
clobber

然后安装并使用
startBuildPremission
功能

要使用该功能,请添加system.locks.readLock。或system.locks.writeLock。属性设置为生成配置。 只有在没有使用相同名称的读锁或写锁运行的生成时,才会启动具有writeLock的生成。 只有在没有使用相同名称的写锁运行的生成时,才会启动具有readLock的生成

其中用于管理从属配置“读取”和
DeploySite
config“写入”共享项的事实

(这不是一个全面生产的解决方案,因此跟踪器项目保持打开状态)

编辑:我仍然不知道锁是否应该在构建参数|系统属性下,确切的名称格式应该是什么,是
locks.writeLock.MYLOCKNAME
(即,在配置中显示引用语法
%System.locks.writeLock.MYLOCKNAME%


其他难题是:如何管理由writeLock任务读取访问的生成完成触发的生成-锁是否会在下一个读取之前被丢弃(这将允许另一个写入者进入)-或者有必要让某个内容同时排队处理父依赖项和子依赖项吗?

看起来这已在和中介绍过