Continuous integration 是否可以防止TeamCity中的构建链中断?

Continuous integration 是否可以防止TeamCity中的构建链中断?,continuous-integration,teamcity,teamcity-7.1,Continuous Integration,Teamcity,Teamcity 7.1,我在TeamCity 7.1.3中有以下设置: 项目A 构建并部署一个 测试A(快速) 测试A(慢) 测试A(非常慢) 项目B 构建和部署B 测试B(快速) 测试B(慢) A的所有测试都依赖于“构建和部署A”,B的所有测试都依赖于“构建和部署B”。这些依赖项都是具有以下设置的快照依赖项: 如果有合适的版本,请不要运行新版本 仅使用来自合适版本的成功版本 在同一代理上运行构建 所有测试都有VCS触发器。慢速测试仅在源代码管理中的特定文件夹更改时运行。对项目a进行提交时,将以下项目添加到

我在TeamCity 7.1.3中有以下设置:

项目A

  • 构建并部署一个
  • 测试A(快速)
  • 测试A(慢)
  • 测试A(非常慢)
项目B

  • 构建和部署B
  • 测试B(快速)
  • 测试B(慢)
A的所有测试都依赖于“构建和部署A”,B的所有测试都依赖于“构建和部署B”。这些依赖项都是具有以下设置的快照依赖项:

  • 如果有合适的版本,请不要运行新版本
  • 仅使用来自合适版本的成功版本
  • 在同一代理上运行构建
所有测试都有VCS触发器。慢速测试仅在源代码管理中的特定文件夹更改时运行。对项目a进行提交时,将以下项目添加到生成队列:

  • 构建并部署一个
  • 测试A(快速)
  • 测试A(慢)
  • 测试A(非常慢)
预提交生成在生成队列中以较高优先级运行。因此,如果在“生成和部署A”运行时对项目B进行了预提交检查,则生成队列如下所示:

  • 构建和部署B
  • 测试B(快速)
  • 测试B(慢)
  • 测试A(快速)
  • 测试A(慢)
  • 测试A(非常慢)
这种设置的问题在于,这意味着A的测试将在部署项目B之后运行。这是一个问题,因为项目B的部署覆盖了项目A所需的一些文件。个人生成覆盖的文件是不在签出文件夹中的已部署文件,这就是它们未回滚的原因。有没有办法确保测试的构建链不会中断

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

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


有没有办法在TeamCity有效地设置此功能?

以下是我收集的信息:

  • A和B应该被认为是相互排斥的
  • A的生成优先级应始终低于B,但
  • 启动后,不应中断
也许有办法在这方面与TeamCity抗衡;我不知道。如果您愿意稍微改变一下流程,其中一个可能适合您:

  • 克隆您的环境,以便可以将
    A
    B
    部署到不同的目标。这将允许它们彼此完全独立地运行。使用多个生成代理(对于
    A
    B
    至少各一个),以允许更快、更高优先级的
    B
    与更慢、更低优先级的
    A
    同时执行。(我认为,这将是一项重要的额外福利。)
  • 使您的流程更原子化。将各种构建/部署/测试件合并到单个配置中,从而确保
    a
    构建链的挂起部分不会被
    B
    替换

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

    通过调用以下命令取消生成:

    http://teamcity.jetbrains.com/guestAuth/ajax.html?comment=<CommentMessage>&submit=Stop&buildId=<BuildId>&kill
    
    http://teamcity.jetbrains.com/guestAuth/ajax.html?comment=&submit=Stop&buildId=&kill
    
    如何在依赖项设置为“重建”的情况下触发生成:


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

    能否平衡提交和预提交构建的优先级?这可能会阻止
    B
    插队。这将解决一些问题,但如果重新排序生成队列,它仍然不会被拾取。此外,我们希望个人构建以更高的优先级运行。