我正在尝试将厨师与詹金斯整合。
我的情景是,我在Chef中创建了一些食谱,并希望通过Jenkins执行厨师运行列表。我在Jenkins中安装了Chef插件(https://github.com/melezhik/chef-plugin/)并提供了所需的参数。 但是,当我现在在Jenkins中构建时,它会抛出“主机密钥验证失败错误”。
我还尝试通过Jenkins执行“sudo chef-client”作为shell命令来反过来,即使这样我也收到同样的错误。
此外,我尝试将Jenkins放在可用Chef节点的同一服务器上,即使问题仍然存在。
任何人都可以指导我。
答案 0 :(得分:6)
chef集成插件使用命令行ssh
从Jenkins连接到客户端计算机以运行sudo chef-client
。您需要完成此ssh
连接和sudo
命令,而无需Jenkins主机的任何密码提示,因为您首先运行Jenkins以确认Jenkins Web界面的用户将能够执行此操作。
以下内容与从厨师服务器到节点的knife ssh
设置基本相同,只是您要使用jenkins服务器/用户替换厨师服务器/用户。
以Jenkins用户身份登录 jenkinshost 上的终端。
如果您还没有a private/public key setup,请生成一个。
ssh-keygen -t rsa -b 2048 -C "jenkinuser@jenkinshost" -N ''
然后将公钥id_rsa.pub
添加到 chefuser @ clienthost 的~/.ssh/authorized_keys
文件中。
ssh-copy-id chefuser@clienthost
如果您无法使用ssh
登录 clienthost ,则可能需要手动执行此操作。
清理旧客户端的任何痕迹(您的错误消息表明这可能是一个问题)
ssh-keygen -R clienthost
测试ssh
连接,并接受主机密钥。
ssh chefuser@clienthost
现在在 clienthost 上,设置sudo
以便chefuser
可以chef-client
作为root
visudo
然后添加行(您的chef-client
路径可能不同)
chefuser ALL=(ALL) NOPASSWD: /usr/local/bin/chef-client
在 jenkinshost 上,确认ssh chefuser@clienthost sudo chef-client -v
在没有密码提示的情况下运行。
$ ssh chefuser@clienthost sudo /usr/local/bin/chef-client -v
Chef: 11.16.0
一旦你能做到这一点,Jenkins插件也应该能够。
您希望从Jenkins运行chef-client的每台计算机都需要添加公钥并测试手动ssh
连接,直到它工作而不会提示您。
不幸的是Jenkins Chef插件不允许你为ssh连接提供很多配置选项,因此你必须依赖Jenkins用户的一个默认密钥(id_rsa
)或者说你想要使用每个主机上有一个不同的密钥,通过~/.ssh/config
ssh_config
配置特定于主机的ssh连接详细信息
答案 1 :(得分:0)
"主机密钥验证失败错误"很明显,你的jenkins主机不知道目标服务器。
ssh-keyscan target_host > ~/.ssh/known_hosts
,然后重试,它应该按预期工作。
编辑:keyscan可能是jenkins本身的任务。对于我假设您在linux机器上运行jenkins的路径,如果需要,请适应jenkins用户主路径或使用%HOME%代替〜