6

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

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

从我最初的研究来看,似乎拥有一个通过快照依赖AcceptanceTests项引入一组单独的验收测试配置的元构建配置应该可以解决问题。然后我所要做的就是说我的构建配置应该触发并且它们都会被拉入。所以,假设我也有,并且CommitAcceptanceTestsAcceptanceSuiteAAcceptanceSuiteBAcceptanceSuiteC

到目前为止,一切都很好(我知道我也可以反过来让Commit配置触发AcceptanceSuiteAAcceptanceSuiteB并且AcceptanceSuiteC- 问题是我需要手动汇总结果以确定整个验收测试的整体成功)。

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

  • DeploySite(假设这需要 2 分钟,而我不能为此运行一个完全隔离的设备)
  • 针对已部署的站点运行测试

问题是我需要能够确保:

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

如果我设置DeploySite为构建配置并将AcceptanceSuiteAAcceptanceSuiteB作为快照依赖项拉入,AFAICT:

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

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

TeamCity 中有没有办法对这种层次结构进行建模?

编辑:想法:-

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

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

4

1 回答 1

3

看来你先去看看Jetbrains DevnetYouTrack 跟踪器,记得在搜索中使用这个神奇的词clobber

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

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

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

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

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

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

于 2011-04-11T12:26:27.970 回答