我在TeamCity 7.1.3中设置了以下内容:
项目A
项目B
A的所有测试都依赖于'Build & Deploy‘,B的所有测试都依赖于'Build & Deploy’。这些依赖项都是具有下列设置的快照依赖项:
所有的测试都有VCS触发器。只有在更改源代码管理中的特定文件夹时,才会运行慢速测试。当提交到项目A时,以下项目将被添加到构建队列中:
预提交构建在构建队列中以更高的优先级运行。因此,如果在运行“build & Deploy”时对项目B进行预提交检查,则生成队列如下所示:
这个设置的问题是,这意味着A的测试是在项目B被部署之后运行的。这是一个问题,因为项目B的部署覆盖了项目A所需的一些文件。被个人构建覆盖的文件是部署在签出文件夹中的文件,这就是为什么它们没有回滚的原因。有没有办法强制测试的构建链不被中断?
如果我从依赖项中删除了“如果有合适的话不要运行新构建”设置,那么每个测试都需要一个完整的构建和部署。较慢的测试不能依赖于其他测试来建立一个线性链,因为有时“测试A(非常慢)”正在运行,而“测试A(很慢)”则不是。
不幸的是,目前还不可能将构建和部署分开来创建人工制品。
有什么方法可以在TeamCity中有效地设置这一点吗?
发布于 2013-02-11 14:58:19
我通过让“build &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?
这意味着,当测试不同步时,部署将被重新触发,然后测试将运行。
发布于 2013-02-04 17:34:53
以下是我收集的信息:
在这个问题上也许有办法和TeamCity对抗,我不知道。如果您对更改流程持开放态度,那么其中之一可能对您有用:
A
和B
部署到不同的目标。这将使它们完全独立地运行。使用多个构建代理(至少一个用于A
和B
),以允许速度更快、优先级更高的B
与较慢、更低优先级的A
同时执行。(我认为,这将是一项重要的福利。)A
构建链中挂起的部分不会被B
替换。https://stackoverflow.com/questions/14623473
复制相似问题