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

Rub*_*ink 6 msbuild teamcity acceptance-testing automated-deploy

我正在尝试在TeamCity 6中配置一组构建配置,并尝试以最简洁的方式为TeamCity启用特定需求.

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

从我最初的研究来看,似乎有一个AcceptanceTests元构建配置通过快照依赖关系引入一组单独的Acceptance测试配置应该可以解决问题.然后我所要做的就是说我的Commit构建配置应该触发AcceptanceTests并且它们都会被拉入.所以,我们说我也有AcceptanceSuiteA,AcceptanceSuiteB并且AcceptanceSuiteC

到目前为止,这么好(我知道我也可以转向另一种方式并导致Commit配置触发AcceptanceSuiteA,AcceptanceSuiteB并且AcceptanceSuiteC- 问题是我需要手动汇总结果以确定整体验收测试的整体成功).

复杂的一点是,虽然AcceptanceSuiteC只需要一些Commit工件,然后可以自己生活,AcceptanceSuiteAAcceptanceSuiteB需要:

  • DeploySite (假设这需要花费2分钟时间,而且我不能为了这次运行而完全隔离一个)
  • 对部署的站点运行测试

问题是我需要能够确保:

  • 该网站只配置一次
  • 两个套房正在运行时,该网站不会被破坏

如果我设置DeploySite为构建配置,并具有AcceptanceSuiteAAcceptanceSuiteB拉它作为快照依赖,AFAICT:

  • 后续或并行运行AcceptanceSuiteB可能触发另一个DeploySite会破坏正在使用AcceptanceSuiteA和/或AcceptanceSuiteB正在使用的部署.

虽然我可以说限制同时运行的构建的数量以强制一次只发生一个,我需要一次有一个不是依赖件仍在运行.

TeamCity中有没有方法来建模这样的层次结构?

编辑:想法: -

甲掷骰子解决方案是,DeploySite可以设置一个"在使用标志"的标记,然后使AcceptanceTests配置清楚的是标志[后AcceptanceSuiteAAcceptanceSuiteB完成.然后问题变成让下一个DeploySite管道等待,直到所述门再次打开(在构建中进行阻塞等待,感觉不对 - 我希望它被标记为'尚未启动'而不是看起来像它的花很长时间做某事).然而,这种东西在这里有一个标志并且有点检查它是我试图摆脱的那种可变的状态/片状气味.

编辑2:如果我可以通过编程方式更改代理配置,我可以将代理要求设置为要求InUse = false,然后在部署启动时设置标志并在测试运行后清除它

Rub*_*ink 3

看来您首先要查看Jetbrains DevnetYouTrack 跟踪器clobber,并记住在搜索中使用魔法词。

然后安装groovy-plug并使用该StartBuildPrecondition工具

要使用该功能,请添加system.locks.readLock。或system.locks.writeLock。属性到构建配置。仅当没有使用同名的读锁或写锁运行的构建时,才会启动使用 writeLock 的构建。仅当没有使用同名写锁运行的构建时,才会启动使用 readLock 的构建。

DeploySite其中管理依赖配置“读取”和配置“写入”共享项目的事实。

(这不是完整的产品化解决方案,因此跟踪器项目保持开放状态)

编辑:我仍然不知道锁是否应该位于“构建参数|系统属性”下,以及确切的名称格式应该是什么locks.writeLock.MYLOCKNAME(即,使用参考语法显示在配置中%system.locks.writeLock.MYLOCKNAME%)?

其他令人困惑的问题是:如何管理由 writeLock 任务的构建完成触发的构建读取访问 - 锁是否会被删除,直到下一个获取(这将允许另一个写入者进入) - 或者是否有必要将某些内容排队父母和孩子同时依赖?