我在TeamCity 7.1.3中进行了以下设置:
项目A
项目B
A的所有测试都取决于'Build&部署A'和B的所有测试依赖于'Build&部署B'。依赖项是所有快照依赖项,具有以下设置:
所有测试都有VCS触发器。仅当源控件中的特定文件夹更改时,才会运行慢速测试。当对项目A进行提交时,以下项目将添加到构建队列中:
预提交构建在构建队列中以更高优先级运行。因此,如果同时'Build&部署A'正在运行对项目B的预提交检查,然后构建队列看起来像:
这种设置的问题在于它意味着在部署项目B之后运行A的测试。这是一个问题,因为项目B的部署会覆盖项目A所需的一些文件。个人构建所覆盖的文件是不在checkout文件夹中的部署文件,这就是它们不回滚的原因。有没有办法强制执行测试的构建链不会中断?
如果我从依赖项中删除“不要运行新构建,如果有合适的构建”设置,则每个测试都需要完整构建和部署。较慢的测试不能依赖于其他测试来制作线性链,因为有时“测试A(非常慢)”运行,但“测试A(慢速)”不是。
不幸的是,目前无法拆分构建和部署以创建人工制品。
有没有办法在TeamCity中有效地设置它?
答案 0 :(得分:1)
这是我正在收集的内容:
可能有一种方法可以对抗TeamCity;我不知道。如果你愿意改变你的过程,其中一个可能对你有用:
A
和B
可以部署到不同的目标。这将允许它们完全独立地运行。使用多个构建代理(A
和B
各自至少一个)允许更快,更高优先级B
与更慢,更低优先级{{1}同时执行}。 (我认为,这将是一个重要的振作。)A
构建链的待定部分不能被替换为A
。答案 1 :(得分:1)
我通过制作'build& amp; deploy'构建配置将文本文件写入包含构建类型和内部版本号的部署文件夹。所有测试都将文本文件中的值与当前构建快照依赖项进行比较。如果它们的值不同,请重新触发构建(强制重建依赖项),然后取消当前构建。
通过调用取消构建:
http://teamcity.jetbrains.com/guestAuth/ajax.html?comment=<CommentMessage>&submit=Stop&buildId=<BuildId>&kill
如何使用设置为重建的依赖项触发构建:
Is it possible to force a TeamCity build to rebuild dependencies when triggered over HTTP?
这意味着当测试用完时,将重新触发部署,然后运行测试。