詹金斯管道里面的码头里面的Git不工作

我想在一个作为詹金斯管道的一部分运行的码头容器里面执行一些git查询。 在Docker容器的外面,sshsgent工作正常,我可以访问我的SCM没有问题。在容器内部,我得到了主机密钥验证问题。
任何人都可以帮我解决我犯的错误吗?詹金斯管道里面的码头里面的Git不工作

script { 

sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519'])

{

sh("""

ssh -p 7999 [email protected] 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 [email protected] whoami

""")

}

}

}

}

首先WHOAMI呼叫输出:

[docker_git_test] Running shell script 

+ ssh -p 7999 [email protected] whoami

d42967b44abe31d6

第二呼叫(和回声)在搬运工容器输出:

[docker_git_test] Running shell script 

+ echo /tmp/ssh-dSoDZMggpAU1/agent.13

/tmp/ssh-dSoDZMggpAU1/agent.13

+ ssh -p 7999 [email protected] whoami

Host key verification failed

回答:

主机键验证失败

S容器中的SH连接无法验证主机的(bitbucket-eng-gpk1.com)身份,这是它失败的原因。当詹金斯提供一个容器时,它会试图限制外部世界的事物数量,比如环境变量和文件系统的位置,这些构建步骤会被隔离。在您的容器中,它在进行连接之前未接受VCS的主机密钥,并且它不是交互式终端,因此会失败。

有几种不同的方法来处理这个问题。下面是一些我能想到的把我的头顶部:

  • 忽略主机密钥检查(明白这个(安全隐患1,2)) - 使用StrictHostKeyChecking选项来禁用检查。 UserKnownHostsFile选项可以在连接其他地方管理接受的键时使用。这也可以通过~/.ssh/config文件中的每个主机完成。

    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -p 7999 [email protected] whoami 

  • 建立SSH密钥进入多克尔图像(脆)

  • 挂载~/.ssh/config文件到从与
  • 主机的容器从主“安装”一些SSH配置文件,或者使用一些其他配置文件提供程序已将验证的主机密钥装入容器(可能使用Config File Provider Plugin

回答:

只是为了显示我的工作。在mkobits的建议上,我在sh命令中添加了两行来编写解决问题的ssh配置文件。

sshagent(['e9f7d09a-7b88-4bf7-814c-464f811d9519']) 

{

sh("""

echo $SSH_AUTH_SOCK

mkdir ~/.ssh

echo 'Host *\n StrictHostKeyChecking no' > ~/.ssh/config

ssh -p 7999 [email protected] whoami

""")

}

它可以内置到dockerfile中,但由于我使用共享映像,所以这种方式适合我的目的。

编辑:我已经加入到dockerfile如此,我们在这里:

RUN useradd -r -u 1000 builder 

COPY config /home/builder/.ssh/config

RUN chown builder:builder /home/builder/.ssh/*

USER builder

ENTRYPOINT ["/bin/bash"]

添加非root用户,这样文件不会留在工作区的根。 需要运行chown,并将添加的文件添加到作为所有者的根。 获取添加的配置文件是:

Host * 

StrictHostKeyChecking no

干杯!

以上是 詹金斯管道里面的码头里面的Git不工作 的全部内容, 来源链接: utcz.com/qa/264022.html

回到顶部