由于错误 "SSL certificate problem: unable to get local issuer certificate" (Bitbucket),Jenkins 管道脚本阻塞 git 拉取

Jenkins pipeline script blocking git pull due to error "SSL certificate problem: unable to get local issuer certificate" (Bitbucket)

我的詹金斯管道脚本非常简单(到目前为止),见下文

node{
    stage('Scm Checkout'){
        git credentialsId: 'git-creds', url: 'https://xx@xx/xx.git'
    }
}

我得到的错误是 SSL certificate problem: unable to get local issuer certificate - 我从 bitbucket 仓库中提取。

有趣的是它在以下行失败:

git.exe fetch --tags --force --progress -- https://xx@xx/xx.git +refs/heads/*:refs/remotes/origin/* # timeout=10

但是我可以 运行 从 git bash 这很好,如果我先 运行 以下命令:

git config --global http.sslVerify false

我在其他地方看到 post 有人遇到同样的问题,他的评论是:"Adding following to gitconfig file resolved the issue"

{{[http] }}

sslVerify = false

这可能是解决方案,但我不确定我需要遵循哪些具体步骤才能实现此目的

禁用 ssl 验证很少是一个好的解决方案,只会考虑用于测试(例如检查网络连接是否有效)

最好定义一个执行 git config --list 的虚拟作业,并记下 ca-bundle.crt.

http.sslcainfo 路径

您可以在该捆绑包中添加 certificates from bitbucket.org(使用 openssl s_client -showcerts -connect)。

如果您想在git中禁用ssl验证,并且不想在您的管道中执行git config ...命令,您可以编辑git配置文件并添加最后

[http]
sslVerify = false

您可以在不同的文件中执行此操作,具体取决于您是希望此更改仅应用于当前存储库,还是应用于同一节点中的所有存储库。我建议你看看 git-config man page

FILES
... there are three files where git config will search for configuration options:

$GIT_DIR/config
Repository specific configuration file. (The filename is of course relative to the repository root, not the working directory.)

~/.gitconfig
User-specific configuration file. Also called "global" configuration file.

$(prefix)/etc/gitconfig
System-wide configuration file.

在检出之前添加一个步骤,将此配置插入活动存储库中,这样就可以解决问题,并且只会影响当前存储库。以下代码行中的某些内容应该可以工作

node {
    stages {
        stage('Pre-Checkout') {
            steps {
                sh "git config http.sslVerify false"
            }
        }
        stage('Scm Checkout'){
            git credentialsId: 'git-creds', url: 'https://xx@xx/xx.git'
        }
    }
}