如何在需要时触发昂贵的构建步骤?

时间:2017-08-31 01:05:00

标签: teamcity

我有一个TeamCity项目,其中包含以下构建配置:

  1. 收集依赖关系(昂贵)
  2. 构建
  3. 测试
  4. 部署
  5. 说我知道是否需要通过更改某个文件deps.txt来执行此操作。

    这就是我想要做的事情:

    • 我想在版本控制的所有更改中触发构建。
    • 如果deps.txt发生了变化,我想运行构建1,然后是2,然后是3,然后是4。
    • 如果deps.txt没有改变,我想运行构建2然后3然后运行4。

    我尝试将触发器放在构建配置上,如下所示:

    1. VCS在没有签到时触发,除非+:deps.txt
    2. 所有签到的VCS跳转,除非-:deps.txt
    3. 快照依赖于2,2完成构建时触发
    4. 快照依赖于3,3完成构建时触发
    5. 但如果提交包括更改deps.txt 其他文件,则配置1和2会同时触发,这意味着配置2将失败。

      在TeamCity中有一种简单的方法吗?

2 个答案:

答案 0 :(得分:2)

您可以将1合并为2,然后对于收集依赖项的构建步骤1,编写一个使用teamcity.build.changedFiles.file属性的自定义脚本(请参阅TeamCity docs)以检查deps.txt是否具有实际上是否改变了,然后收集依赖关系。然后,从2开始的其余构建步骤将正常进行。

答案 1 :(得分:2)

我想提出一个不同的方法:

一个。创建重复的构建配置

湾触发上一次构建的整个构建链。

第一个构建配置链:

  1. 收集依赖关系:无触发器

  2. 构建:对同一构建链上的1的快照和工件依赖关系,无触发器

  3. 测试:对同一构建链上的2的快照和工件依赖关系,无触发器

  4. 部署:同一链上3的快照和工件依赖关系,+上的VCS触发器:deps.txt

  5. 构建配置的第二个链:

    1. 构建:上次成功构建时的快照和工件依赖关系为1,无触发器

    2. 测试:对同一链上的5的快照和工件依赖关系,无触发

    3. 部署:对同一链上的6的快照和工件依赖关系,任何更改时的VCS触发器 - :deps.txt

    4. 为了减少重复,您可以使用2和5,3和6,4和7的模板。