是否可以防止构建链在TeamCity中被中断?

时间:2013-01-31 10:23:59

标签: continuous-integration teamcity teamcity-7.1

我在TeamCity 7.1.3中进行了以下设置:

项目A

  • 构建&部署A
  • 测试A(快速)
  • 测试A(慢)
  • 测试A(非常慢)

项目B

  • 构建&部署B
  • 测试B(快速)
  • 测试B(慢)

A的所有测试都取决于'Bui​​ld&部署A'和B的所有测试依赖于'Bui​​ld&部署B'。依赖项是所有快照依赖项,具有以下设置:

  • 如果有合适的
  • ,请不要运行新版本
  • 仅使用合适的构建
  • 在同一代理上运行构建

所有测试都有VCS触发器。仅当源控件中的特定文件夹更改时,才会运行慢速测试。当对项目A进行提交时,以下项目将添加到构建队列中:

  • 构建&部署A
  • 测试A(快速)
  • 测试A(慢)
  • 测试A(非常慢)

预提交构建在构建队列中以更高优先级运行。因此,如果同时'Build&部署A'正在运行对项目B的预提交检查,然后构建队列看起来像:

  • 构建&部署B
  • 测试B(快速)
  • 测试B(慢)
  • 测试A(快速)
  • 测试A(慢)
  • 测试A(非常慢)

这种设置的问题在于它意味着在部署项目B之后运行A的测试。这是一个问题,因为项目B的部署会覆盖项目A所需的一些文件。个人构建所覆盖的文件是不在checkout文件夹中的部署文件,这就是它们不回滚的原因。有没有办法强制执行测试的构建链不会中断?

如果我从依赖项中删除“不要运行新构建,如果有合适的构建”设置,则每个测试都需要完整构建和部署。较慢的测试不能依赖于其他测试来制作线性链,因为有时“测试A(非常慢)”运行,但“测试A(慢速)”不是。

不幸的是,目前无法拆分构建和部署以创建人工制品。

有没有办法在TeamCity中有效地设置它?

2 个答案:

答案 0 :(得分:1)

这是我正在收集的内容:

  • A和B应被视为互斥。
  • A的构建优先级应始终低于B,但
  • 一旦开始,A不应该被打断。

可能有一种方法可以对抗TeamCity;我不知道。如果你愿意改变你的过程,其中一个可能对你有用:

  1. 克隆您的环境,以便AB可以部署到不同的目标。这将允许它们完全独立地运行。使用多个构建代理(AB各自至少一个)允许更快,更高优先级B与更慢,更低优先级{{1}同时执行}。 (我认为,这将是一个重要的振作。)
  2. 使您的流程更具原子性。将各种构建/部署/测试部分合并到一个配置中,从而确保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?

这意味着当测试用完时,将重新触发部署,然后运行测试。