厨师与詹金斯整合

时间:2014-09-09 08:25:25

标签: jenkins chef

我正在尝试将厨师与詹金斯整合。

我的情景是,我在Chef中创建了一些食谱,并希望通过Jenkins执行厨师运行列表。我在Jenkins中安装了Chef插件(https://github.com/melezhik/chef-plugin/)并提供了所需的参数。 但是,当我现在在Jenkins中构建时,它会抛出“主机密钥验证失败错误”。

我还尝试通过Jenkins执行“sudo chef-client”作为shell命令来反过来,即使这样我也收到同样的错误。

此外,我尝试将Jenkins放在可用Chef节点的同一服务器上,即使问题仍然存在。

任何人都可以指导我。

2 个答案:

答案 0 :(得分:6)

chef集成插件使用命令行ssh从Jenkins连接到客户端计算机以运行sudo chef-client。您需要完成此ssh连接和sudo命令,而无需Jenkins主机的任何密码提示,因为您首先运行Jenkins以确认Jenkins Web界面的用户将能够执行此操作。

以下内容与从厨师服务器到节点的knife ssh设置基本相同,只是您要使用jenkins服务器/用户替换厨师服务器/用户。

以Jenkins用户身份登录 jenkinshost 上的终端。

  1. 如果您还没有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 ,则可能需要手动执行此操作。

  2. 清理旧客户端的任何痕迹(您的错误消息表明这可能是一个问题)

    ssh-keygen -R clienthost
    
  3. 测试ssh连接,并接受主机密钥。

    ssh chefuser@clienthost
    
  4. 现在在 clienthost 上,设置sudo以便chefuser可以chef-client作为root

    运行
    visudo
    

    然后添加行(您的chef-client路径可能不同)

    chefuser ALL=(ALL) NOPASSWD: /usr/local/bin/chef-client
    
  5. jenkinshost 上,确认ssh chefuser@clienthost sudo chef-client -v在没有密码提示的情况下运行。

    $ ssh chefuser@clienthost sudo /usr/local/bin/chef-client -v
    Chef: 11.16.0
    
  6. 一旦你能做到这一点,Jenkins插件也应该能够。

    您希望从Jenkins运行chef-client的每台计算机都需要添加公钥并测试手动ssh连接,直到它工作而不会提示您。

    不幸的是Jenkins Chef插件不允许你为ssh连接提供很多配置选项,因此你必须依赖Jenkins用户的一个默认密钥(id_rsa)或者说你想要使用每个主机上有一个不同的密钥,通过~/.ssh/config

    中的ssh_config配置特定于主机的ssh连接详细信息

答案 1 :(得分:0)

"主机密钥验证失败错误"很明显,你的jenkins主机不知道目标服务器。

在您的jenkins主机上(作为jenkins用户)运行ssh-keyscan target_host > ~/.ssh/known_hosts,然后重试,它应该按预期工作。

编辑:keyscan可能是jenkins本身的任务。对于我假设您在linux机器上运行jenkins的路径,如果需要,请适应jenkins用户主路径或使用%HOME%代替〜