如何禁用 Jenkins 结帐和 git 插件 SSL 验证?
Posted
技术标签:
【中文标题】如何禁用 Jenkins 结帐和 git 插件 SSL 验证?【英文标题】:How to disable Jenkins checkout and git plugin SSL verify? 【发布时间】:2021-12-24 14:14:57 【问题描述】:我正在 K8s 节点中运行 Jenkins 代理。
我在 dockerfile 中添加了git config --global http.sslVerify false
。我也在 dockerfile 中添加了~/.gitconfig
。
我尝试在管道中使用 Jenkins checkout
和 git
来获取代码,但出现以下错误:
stderr: fatal: unable to access 'https://gitlab-ops.prod.hccn/iac/gitops/vsphere_linux.git/': SSL certificate problem: unable to get local issuer certificate
但如果我用sh git clone
命令替换它们,就可以了。
所以这是我的问题:
git config --global http.sslVerify false
仅适用于 git
命令,不适用于 Jenkins checkout
和 git
,对吗?因为git
命令是sh命令,而Jenkinscheckout
git
是某种Java插件?
Jenkins checkout
是否也引用了 git
或 gitclient
插件?
如何禁用 Jenkins checkout
和 git
插件 SSL 验证?我在 jenkins git-client plugin 或 jenkins git plugin 或 jenkins scm plugin 上找不到它们
补充:
-
我在每个 k8s 节点上运行
git config --global http.sslVerify false
Jenkins 版本为 2.277.4
Jenkins Git 插件版本为 4.7.1
Jenkins Git 客户端插件版本为 3.7.1
补充2:
我有 2 个 git 项目。 Jenkinsfile
在第一个,在 Jenkins Job 中配置。默认结帐运行良好。在管道运行期间,它会尝试在 Jenkins 代理上拉出另一个 git 项目,这就是问题所在。
【问题讨论】:
【参考方案1】:使用Jenkins Git client plugin,我会避免使用JGit(设置在this setting)
我愿意:
选择 Git 确保git
位于 Jenkins 控制器(以前称为“master”)的 $PATH
中
然后将强制执行全局设置 http.sslVerify
。
虽然,作为seen here,JGit 也应该能够读取相同的设置。
来自the comments/discussion,OP Bryan Chen 添加:
我有两个 git 项目。 Jenkinsfile 在第一个,在 Jenkins Job 中配置。默认结帐运行良好。 在管道运行期间,它会尝试在 Jenkins 代理上拉另一个 git 项目,这就是问题所在。
这意味着根本原因似乎在作为代理(在容器中)执行作业的容器中,而不是在主 Jenkins 控制器中。
【讨论】:
你好,@VonC。我当前的 git 选择是git
,.gitconfig
位置是 /root/ 并且已经生效。我可以通过git config --list
看到它,Jenkins 进度 UID 是 root。同时,我在docker(K8s节点的Jenkins代理)中运行git config --list
,也生效了。正如我所提到的,sh git
可以,但 Jenkins checkout
和 git
函数不行。
@BryanChen 然后仔细检查 Jenkins 控制器使用哪个帐户运行,并尝试在控制器上执行作业,使用简单的脚本步骤git config --global -l
你好@Vonc,这是命令输出:ps -ef | grep jenkins
:root 2362 1 0 Nov04 ? 00:46:46 /etc/alternatives/java ........Omit some parameters
。 Git 配置生效:git config --global -l
:http.sslverify=false
这里是完整的输出:root 2362 1 0 Nov04 ? 00:46:46 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Xmx4096m -Dorg.csanchez.jenkins.plugins.kubernetes.pipeline.ContainerExecDecorator.websocketConnectionTimeout=60 -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=9080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
@BryanChen 为什么以 root 身份运行 Jenkins?这通常是读取错误全局 Git 配置的原因。以上是关于如何禁用 Jenkins 结帐和 git 插件 SSL 验证?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用管道代码覆盖默认的 Jenkins Git 插件检出?