如何禁用 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 checkoutgit 来获取代码,但出现以下错误:

 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 checkoutgit,对吗?因为git命令是sh命令,而Jenkinscheckoutgit是某种Java插件? Jenkins checkout 是否也引用了 gitgitclient 插件? 如何禁用 Jenkins checkoutgit 插件 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 checkoutgit 函数不行。 @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 插件检出?

使用 Jenkins git 插件的凭据

如何从 Jenkins (Hudson) 卸载插件?

特定数量的提取后,带有 Jenkins 的 Git 插件在“git reset --hard”中失败

jenkins 安装git插件的那些坑

jenkins对接gitlab和git