Jenkins:如何阻止特定阶段在SCM推送时自动触发构建
解决方案
你可以通过在when块中组合匹配两种合法触发场景的逻辑实现需求,正确配置如下:
when { anyOf { triggeredBy 'TimerTrigger' // 匹配定时触发场景 triggeredBy 'UserIdCause' // 匹配用户手动触发场景 } }
原配置失效原因说明
- 仅配置
triggeredBy 'TimerTrigger'仅匹配定时触发逻辑,没有包含手动触发的匹配规则,所以手动构建时阶段不会执行 - 单独使用
not { triggeredBy 'SCMTrigger' }失效是因为部分Jenkins版本或插件组合下,SCM触发的构建可能同时携带多个触发原因,导致反向匹配逻辑判断异常,无法正确识别SCM触发场景
可选的严谨校验配置
如果需要彻底避免其他未知触发类型执行该阶段,可以叠加排除SCM触发的逻辑:
when { allOf { not { triggeredBy 'SCMTrigger' } anyOf { triggeredBy 'TimerTrigger' triggeredBy 'UserIdCause' } } }
你可以在对应阶段加入打印触发原因的步骤,验证配置是否符合预期:
steps { echo "当前构建触发原因:${currentBuild.getBuildCauses()}" }
内容的提问来源于stack exchange,提问作者Oplop98
相关产品推荐
相关产品推荐

