厨师与詹金斯整合

Kan*_*ana 3 chef-infra jenkins

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

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

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

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

任何人都可以指导我这个.

Mat*_*att 6

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

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

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

  1. 如果您还没有私钥/公钥设置,请生成一个.

    ssh-keygen -t rsa -b 2048 -C "jenkinuser@jenkinshost" -N ''
    
    Run Code Online (Sandbox Code Playgroud)

    然后将公钥添加id_rsa.pubchefuser @ clienthost~/.ssh/authorized_keys文件中.

    ssh-copy-id chefuser@clienthost
    
    Run Code Online (Sandbox Code Playgroud)

    如果您尚未登录到clienthost,则可能需要手动执行此操作ssh.

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

    ssh-keygen -R clienthost
    
    Run Code Online (Sandbox Code Playgroud)
  3. 测试ssh连接,并接受主机密钥.

    ssh chefuser@clienthost
    
    Run Code Online (Sandbox Code Playgroud)
  4. 现在CLIENTHOST,设置sudo这样chefuser可以运行chef-clientroot

    visudo
    
    Run Code Online (Sandbox Code Playgroud)

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

    chefuser ALL=(ALL) NOPASSWD: /usr/local/bin/chef-client
    
    Run Code Online (Sandbox Code Playgroud)
  5. jenkinshost上,确认ssh chefuser@clienthost sudo chef-client -v没有密码提示的运行.

    $ ssh chefuser@clienthost sudo /usr/local/bin/chef-client -v
    Chef: 11.16.0
    
    Run Code Online (Sandbox Code Playgroud)

一旦你能做到这一点,Jenkins插件也应该能够.

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

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