You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:06:01