TeamCity构建链如何根据自定义变量选择性触发对应Build任务
可行性结论
该需求完全可以通过TeamCity原生功能实现,无需安装第三方插件。
当前构建链结构如下:
|----> Build A -| Prebuild-| |----> Test Results |----> Build B -|
具体配置步骤
- 配置Prebuild传递变量
你在Prebuild中根据PR标签设置的控制变量(可命名为build.targets),需要在变量配置页勾选传递给依赖构建选项,保证下游Build A、Build B可以读取到变量值,变量取值保持A、B、A,B即可。 - 为Build A、Build B配置条件触发规则
不要使用默认的「上游构建成功即触发下游」规则,单独为两个构建配置触发判断逻辑:- 进入Build A配置页,打开「依赖」-「快照依赖」,找到它对Prebuild的依赖项,展开高级设置找到「触发条件」输入框,填写表达式:
保存后,只有Prebuild传递的变量包含"A"时,Build A才会被触发。%build.targets%.contains("A") - 用相同方式进入Build B的快照依赖配置,为它对Prebuild的依赖添加触发条件:
%build.targets%.contains("B")
- 进入Build A配置页,打开「依赖」-「快照依赖」,找到它对Prebuild的依赖项,展开高级设置找到「触发条件」输入框,填写表达式:
- 调整Test Results的依赖兼容规则
由于存在单个上游构建(A或B)不触发的场景,需要进入Test Results的快照依赖配置页,分别找到它对Build A、Build B的依赖项,将「依赖未启动时的处理策略」设置为「忽略」,避免Test Results因为某个上游未启动一直卡在等待状态。配置完成后,所有符合触发条件的上游构建全部执行完毕,Test Results就会自动启动。
配置注意事项
- 不要给Build A、Build B额外添加监听Prebuild结束的完成触发器,所有触发逻辑统一通过快照依赖的条件控制,避免规则冲突。
- 如果使用2020.1以前的老旧TeamCity版本,不支持快照依赖自定义触发条件,可以在Prebuild的最后一步编写脚本,调用TeamCity原生REST API,根据
build.targets的取值主动触发对应构建,效果完全一致。 - 配置完成后可手动给Prebuild控制变量赋不同值验证:赋值
A时仅Build A执行完成后启动Test Results,赋值B时仅Build B执行完成后启动Test Results,赋值A,B时A、B并行执行,全部完成后启动Test Results,完全匹配需求。
内容的提问来源于stack exchange,提问作者Marija Mihajlova
相关产品推荐
相关产品推荐

