升级Jenkins与Blue Ocean后Steps SCM插件默认行为问题咨询
解决Jenkins Steps SCM自动Checkout的Git Clean问题
刚升级Jenkins到2.89.3、Blue Ocean到1.4.0就碰到Steps SCM的这个激进Git Clean问题,确实挺闹心的。我给你整理了几个直接有效的配置方案,帮你搞定这个困扰:
1. 在Jenkinsfile里显式定义带clean: false的Checkout步骤
如果你想完全掌控Checkout的行为,可以在流水线开头先自定义Checkout步骤,这样Steps SCM就不会自动注入默认的Checkout逻辑了:
pipeline { agent any stages { stage('初始化代码') { steps { checkout([ $class: 'GitSCM', // 沿用你原本配置的分支和远程仓库信息 branches: scm.branches, userRemoteConfigs: scm.userRemoteConfigs, // 保留原SCM的其他扩展,仅把Clean操作设为false extensions: scm.extensions + [[$class: 'CleanCheckout', clean: false]] ]) } } stage('构建') { steps { sh './build.sh' } } // 后续步骤都会用已经检出的仓库,不会再触发自动clean } }
2. 简化写法:直接给默认scm加clean参数
要是你的流水线已经绑定了SCM(也就是scm变量能直接用),可以用更简洁的方式修改clean选项:
checkout scm, clean: false
这个写法会保留原SCM的所有配置,只把clean操作关掉,适合快速调整。
3. 全局修改Git插件默认行为(可选)
如果想让所有流水线都默认禁用这个激进clean,可以去Jenkins全局配置里改:
- 进入「Manage Jenkins」→「Configure System」→「Git」
- 找到「Additional Behaviours」,添加「Clean before checkout」行为,然后取消勾选相关的清理选项,或者直接移除这个行为
- 注意:这个是全局设置,会影响所有用Git SCM的流水线,得跟团队确认好再改
补充说明
Steps SCM本来是为了保证每个步骤启动时仓库状态一致,但这次升级后默认的clean逻辑确实太激进了——会删掉未跟踪文件、重置工作区,很容易搞丢临时生成的文件或者本地配置。用上面的方法关掉clean后,Checkout只会拉最新代码、切分支,不会动你工作区里的未跟踪内容,应该就能解决你的问题了。
内容的提问来源于stack exchange,提问作者Fergal Dearle
相关产品推荐
相关产品推荐

