如何禁用Jenkins checkout与git插件的SSL证书验证?
问题1解答
你的猜测部分正确,但核心原因不是插件用Java实现:
git config --global是对原生git命令生效的,你通过sh git clone可以正常拉取,已经证明全局配置本身是有效的。- Jenkins的
checkout、git步骤默认会调用系统原生git命令,之所以没有读取到你配置的sslVerify false,90%以上的概率是Jenkins agent运行任务的用户和你写入~/.gitconfig的用户不是同一个,或者Jenkins运行任务时修改了HOME环境变量,导致git没有读到对应的全局配置文件。 - 如果你在Git Client插件的全局配置里将git实现改为了
JGit(Java实现的git客户端),那确实不会读取系统的.gitconfig文件,此时原生git的全局配置对插件步骤无效。
问题2解答
是的,checkout SCM步骤完全依赖git插件和git-client插件:
- 上层
checkout步骤和git步骤由Git插件提供,底层git操作能力由Git Client插件提供 - Git Client插件支持两种实现:调用系统原生git命令、使用内置JGit实现
问题3解答
你第一个项目checkout正常,大概率是第一个项目的SCM配置中已经默认开启了跳过SSL验证,或是使用SSH协议拉取不会触发HTTPS证书校验。拉取第二个项目可以通过以下几种方法禁用SSL验证,优先推荐前两种:
- Pipeline checkout步骤直接配置跳过SSL
在拉取第二个项目的checkout步骤中直接添加CloneOption配置即可生效,示例:
checkout([ $class: 'GitSCM', branches: [[name: '你要拉取的分支名,比如*/master']], userRemoteConfigs: [[url: 'https://gitlab-ops.prod.hccn/iac/gitops/vsphere_linux.git']], extensions: [[$class: 'CloneOption', http.sslVerify: false]] ])
- 调整Git Client插件全局配置
进入Jenkins全局管理 -> 工具配置 -> Git 部分:
- 将Git实现改为
Native Git(而非JGit) - 全局添加git配置项
http.sslVerify false,所有调用Git插件的步骤都会生效
- Pipeline中提前写入用户git配置
在调用checkout拉取第二个项目之前,先执行一步sh命令写入当前运行用户的git配置:
sh 'git config --global http.sslVerify false' // 后续再执行checkout步骤即可读到配置
- 如果使用JGit实现的话
在Jenkins agent的启动JVM参数中添加-Dorg.eclipse.jgit.transport.http.disableSslVerification=true即可全局禁用JGit的SSL验证。
内容的提问来源于stack exchange,提问作者Bryan Chen
相关产品推荐
相关产品推荐

