Jenkins多分支流水线出现“Multiple candidate revisions”,随机选旧提交求助
解决Jenkins多分支流水线随机选取旧提交构建的问题
碰到这个“Multiple candidate revisions”导致随机选旧提交的坑,我太熟悉了!核心原因就是你的GitSCM配置没明确锁定分支的最新提交,再加上MessageExclusion规则过滤后留下了多个符合条件的提交,Jenkins就开始“随机选盲盒”了。
问题本质
当Jenkins执行checkout步骤时,它会扫描仓库里匹配release/0.0.1分支的所有提交,再用你设置的消息排除规则过滤。如果过滤后还剩多个提交,就会触发“Multiple candidate revisions”提示,这时Jenkins不会默认选最新的,反而可能随机挑一个旧提交。
具体修复方案
你需要给checkout的扩展配置加几个关键规则,强制Jenkins只拉取分支的最新提交,同时保留你的消息过滤逻辑。
修改后的流水线代码示例
checkout( [ $class: 'GitSCM', branches: [[name: "release/0.0.1"]], doGenerateSubmoduleConfigurations: false, extensions: [ [$class: 'MessageExclusion', excludedMessage: '(?s)^\\[DOC\\] Robot.*'], // 新增以下配置锁定最新提交 [$class: 'LocalBranch', localBranch: '**'], [$class: 'CloneOption', depth: 1, shallow: true, noTags: true, timeout: 10] ], submoduleCfg: [] ] )
关键配置说明
CloneOption的depth:1+shallow:true:直接拉取分支的最新一次提交,彻底减少Jenkins需要扫描的候选提交数量,从根源避免多版本选择的问题。LocalBranch: '**':让本地分支和远程分支完全同步,防止本地残留的旧分支引用干扰Jenkins的版本判断。
如果你的构建需要依赖历史提交(不能用浅克隆),可以把上面的CloneOption换成这个扩展,强制合并到最新分支头:
[$class: 'PreBuildMerge', options: [ mergeRemote: 'origin', mergeTarget: 'release/0.0.1' ]]
额外排查点
- 检查多分支流水线的分支源配置:确认“行为”选项里有没有勾选“只追踪分支头”,而不是扫描所有历史提交。
- 看看仓库里的
release/0.0.1分支有没有和标签重名的情况,这种冲突也会导致Jenkins识别出多个候选版本。
内容的提问来源于stack exchange,提问作者Frank Sehringer
相关产品推荐
相关产品推荐

