TeamCity - 如何组合VCS触发器

时间:2017-06-03 17:05:35

标签: teamcity

情况如下:在git repo中我有3个文件夹: 一个 乙 C 如果对A或C进行了更改,则必须启动构建。在任何其他情况下,如果也对B进行了更改,则不应启动它。如何使用TeamCity VCS Trigger实现此类行为?

2 个答案:

答案 0 :(得分:1)

您应该为该VCS根配置VCS触发器规则。 添加VCS触发器as usual,然后将其添加到规则:

-:B/**

这将触发VCS根目录中的所有内容,文件夹 B 除外。 或者您可以采用不同的方式,并仅针对 A C 文件夹中的更改触发构建:

+:A/**
+:C/**

那会有效,因为

  

输入规则时,请注意,只要输入任何“+”   规则,TeamCity将删除默认的“包括所有”设置。至   包括所有文件,使用“+:。”规则。

答案 1 :(得分:0)

如果特定文件夹" 发生更改,我没有找到"防止构建开始的方法。构建将开始。但是如果检测到B文件夹中的更改,我决定制定解决方法并跳过后续步骤的实际执行。下面的脚本为我提供了环境变量,可以优雅地避免下一个构建步骤的执行。

此脚本基于TeamCity环境变量

%system.teamcity.build.changedFiles.file%

重要提示:不要使用 - :B(在我的情况下 - :lisp)触发规则,否则您将无法从脚本中检测此文件夹中的更改。

剧本:



#!/bin/bash          

listFiles=$(echo %system.teamcity.build.changedFiles.file%)
echo "List files from $listFiles"
echo "--------------------------"
cat $listFiles
echo "--------------------------"
lispFound=$(cat $listFiles | grep -c '^src\/lisp\/*.')
echo "LISP CHANGES WERE DETECTED: $lispFound time(s)"
echo "##teamcity[setParameter name='env.LISP_CHANGES_DETECTED' value ='$lispFound']"




结果,%env.LISP_CHANGES_DETECTED%以及已更改文件的数量将在下一步中可用。在我的情况下,下一步是Ant,并且可以在任何目标中检测是否应该回应"无所事事"然后出去这是执行日志的例子:

enter image description here

改进: 如此处所述Can I cancel a TeamCity build from my msbuild script?

执行可以直接从脚本中正常停止,您需要添加调用以取消执行:



curl -v -u user:password --request POST "http://teamcity:8111/app/rest/builds/<buildLocator>" --data "<buildCancelRequest comment='' readdIntoQueue='false' />" --header "Content-Type: application/xml"
&#13;
&#13;
&#13;