一尘不染

Jenkins管道内的docker内部的Git不起作用

jenkins

我正在尝试在作为Jenkins
Pipeline一部分运行的docker容器内执行一些git查询。在docker容器外面,sshsgent工作正常,我可以访问我的SCM没问题。在容器内部,我收到主机密钥验证问题。
有人可以帮助我解决我所犯的错误吗?

script {
    sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519'])
    {
        sh("""
            ssh -p 7999 git@bitbucket-eng-gpk1.com whoami
        """)
    }
    docker.withRegistry('https://dockerhub.banana.com', 'banana-dockerhub-credential') 
    {
        docker.image('banana_release_base').pull()
        docker.image('banana_release_base').inside(
        '''
           -v /system:/system -v /tmp:/tmp --privileged -u 0
        '''
       )
       {
             sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519'])
             {
                 sh("""
                     echo $SSH_AUTH_SOCK
                     ssh -p 7999 git@bitbucket-eng-gpk1.com whoami
                 """)
             }
        }
    }
}

首先whoami呼叫输出:

[docker_git_test] Running shell script
+ ssh -p 7999 git@bitbucket-eng-gpk1.com whoami
d42967b44abe31d6

docker容器输出中的第二个调用(和回显):

[docker_git_test] Running shell script
+ echo /tmp/ssh-dSoDZMggpAU1/agent.13
/tmp/ssh-dSoDZMggpAU1/agent.13
+ ssh -p 7999 git@bitbucket-eng-gpk1.com whoami
Host key verification failed

阅读 329

收藏
2020-07-25

共1个答案

一尘不染

主机密钥验证失败

容器中的SSH连接无法验证主机(bitbucket-eng-
gpk1.com)的身份,这就是失败的原因。当詹金斯(Jenkins)设置一个容器时,它试图限制外界的东西数量,例如环境变量和它安装到该容器中的文件系统位置,以使构建步骤具有隔离性。在您的容器中,它在建立连接之前尚未接受VCS的主机密钥,并且它不是交互式终端,因此将失败。

有几种不同的方法来处理此问题。我想到了以下几点:

  • 忽略主机密钥检查(知道这个故事的安全隐患(12)) -使用StrictHostKeyChecking选项来禁用检查。该UserKnownHostsFile选项在将接受的密钥通过管道传输到其他位置时很有用。也可以按~/.ssh/config文件中的每个主机进行操作。

    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 7999 git@bitbucket-eng-gpk1.com whoami
    
  • 将SSH密钥构建到Docker映像中(易碎)

  • ~/.ssh/config使用主机将文件从主机挂载到容器中

  • 从主机“安装”一些SSH配置文件,或使用一些具有已验证主机密钥的其他配置文件提供程序(可能使用 Config File Provider插件
2020-07-25