2

我在 TeamCity 7.1.3 中有以下设置:

项目A

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

项目 B

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

A 的所有测试都依赖于“Build & Deploy A”,B 的所有测试都依赖于“Build & Deploy B”。这些依赖项都是具有以下设置的快照依赖项:

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

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

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

预提交构建在构建队列中以更高的优先级运行。因此,如果在“构建和部署 A”运行时对项目 B 进行预提交检查,则构建队列如下所示:

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

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

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

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

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

4

2 回答 2

1

这是我正在收集的内容:

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

可能有办法在这方面与 TeamCity 抗衡;我不知道。如果您愿意稍微改变您的流程,其中之一可能对您有用:

  1. 克隆您的环境,以便A可以B将其部署到不同的目标。 这将允许它们完全独立地运行。使用多个构建代理(至少一个用于AB),以允许更快、更高优先级B与更慢、更低优先级同时执行A。(我认为,这将是一个重要的好处。)
  2. 使您的流程更加原子化。 将各种构建/部署/测试部分合并到一个配置中,从而确保A构建链的待处理部分不会被B.
于 2013-02-04T17:34:53.027 回答
1

我通过使“构建和部署”构建配置都将文本文件写入包含构建类型和构建号的部署文件夹来解决了这个问题。所有测试都将文本文件中的值与当前构建快照依赖项进行比较。如果它们的值不同,则重新触发构建(强制重新构建依赖项),然后取消当前构建。

通过调用取消构建:

http://teamcity.jetbrains.com/guestAuth/ajax.html?comment=<CommentMessage>&submit=Stop&buildId=<BuildId>&kill

如何使用设置为重新构建的依赖项触发构建:

通过 HTTP 触发时,是否可以强制 TeamCity 构建重建依赖关系?

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

于 2013-02-11T14:58:19.887 回答