Jenkins设置ALLOW_LOCAL_CHECKOUT后仍报Git本地检出错误
Jenkins Git本地检出配置放行后仍报错的排查与解决
核心报错信息
ERROR: Checkout of Git remote '<path to project folder>' aborted because it references a local directory, which may be insecure. You can allow local checkouts anyway by setting the system property 'hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT' to true.
问题根因说明
在Jenkins脚本控制台执行System.setProperty("hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT", "true")属于临时内存级配置,仅在当前主节点控制台会话上下文生效,既不会持久化保存,也不会同步到执行任务的Agent节点,Jenkins重启后配置会直接丢失,因此大概率出现配置后仍报错的情况。
可行排查与解决方向
- 优先做配置有效性校验
重启服务后分别在主节点、对应任务运行的Agent节点的脚本控制台上下文里,执行System.getProperty("hudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT"),如果返回值不是true,说明配置根本没有被对应节点的JVM加载。 - 永久配置JVM启动参数(推荐方案)
给所有参与任务执行的节点(主节点+所有Agent节点)统一添加JVM启动参数,从JVM启动阶段就加载该配置:- Systemd/包管理器安装的Jenkins:编辑服务配置文件,在
JENKINS_JAVA_OPTIONS或JAVA_OPTS配置项末尾追加-Dhudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true,重载systemd配置后重启Jenkins服务 - War包直接启动的Jenkins:在启动命令中加入参数,示例:
java -Dhudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true -jar jenkins.war - Docker部署的Jenkins主/从节点:启动容器时传入环境变量
JAVA_OPTS=-Dhudson.plugins.git.GitSCM.ALLOW_LOCAL_CHECKOUT=true
所有节点配置完成后,重启对应节点服务再执行任务验证。
- Systemd/包管理器安装的Jenkins:编辑服务配置文件,在
- 排查Git插件版本问题
4.11.0以下版本的Git插件存在该系统属性的读取逻辑缺陷,即使正确配置参数也无法被识别,升级Git插件到4.11.0以上的稳定版本后,重新配置参数重启即可。 - 测试环境临时绕过方案
本地测试场景下,可以将本地代码目录初始化为裸Git仓库,使用完整的file://协议路径作为仓库地址,可临时绕过本地目录校验,该方案存在安全风险,禁止在生产环境使用。
内容的提问来源于stack exchange,提问作者AFTAB MANNAN
相关产品推荐
相关产品推荐

