情况如下:在git repo中我有3个文件夹: 一个 乙 C 如果对A或C进行了更改,则必须启动构建。在任何其他情况下,如果也对B进行了更改,则不应启动它。如何使用TeamCity VCS Trigger实现此类行为?
答案 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,并且可以在任何目标中检测是否应该回应"无所事事"然后出去这是执行日志的例子:
改进: 如此处所述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;