当前位置: 首页 > 面试题库 >

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

子车鸿运
2023-03-14
问题内容

我正在尝试在作为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

问题答案:

主机密钥验证失败

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

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

  • 忽略主机密钥检查(知道这个故事的安全隐患(1,2)) -使用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插件


 类似资料:
  • 问题内容: 我正在将jenkins- workflow作业迁移到新的基于模板的工作流作业。因为内部版本号用作构建工件版本的一部分,所以工作流必须生成新的工作流的内部版本号,而该数字应大于旧的工作流。不幸的是,“下一个内部版本号”插件不适用于工作流管道。 有人知道这样做的好方法吗? 问题答案: 尝试在Jenkins脚本控制台中的脚本下面运行。将“ workFlow”更改为您的工作名称

  • 嗨,我在容器内创建了三个帧,每个帧都有三个按钮,执行最小值,最大值和关闭功能。令人惊讶的是,只有一帧在工作,其余三帧不起作用。你能不能整理一下。

  • 我正在使用jenkins job DSL插件创建一个jenkins pipeline作业来播种作业。如何获得DSL文件中的工作空间路径?詹金斯管道代码是这样的: 失败的 DSL 代码是: 出现错误: 在管道区域中创建的变量在作业DSL步骤中不可访问

  • 我正在构建一个Quarkus应用程序,它使用resteasy处理http请求,并使用restclient调用另一个api,我需要传播一个头并动态添加另一个头,所以我添加了一个实现ClientHeadersFactory的类。 代码如下: 我的问题是配置的注入不起作用。我使用和两种方法都进行了尝试,如的javadoc所述。我也试图使类不抽象,但它没有改变任何东西。 MicroServicesConf

  • 我试图设置jenkins管道使用gCloud,但我得到以下错误: /service-account-creds.json警告:无法在 /.config/gcloud/logs中设置日志文件,(错误:无法创建目录[/. config/gCloud/logs/2019.02.07]:权限被拒绝。 守则: Jenkins使用imagen Jenkins/Jenkins在容器中运行

  • 问题内容: 我正在Ubuntu 13.04(Raring Ringtail)之上运行最新版本的Docker: 但是当我启动容器时 我没有看到任何限制,并且我的内核启用了cgroups内存限制: 我在这里想念什么明显的东西? 问题答案: 将不会显示它,因为这是通过cgroups强制执行的。而是可以在主机(容器外部)上使用和cgroup内存进行检查: 要查看它的内存不足,可以运行一些将使用比分配的内存