【问题标题】:Chef Integration with JenkinsChef 与 Jenkins 的集成
【发布时间】:2014-11-02 14:16:00
【问题描述】:

我正在尝试将 chef 与 Jenkins 集成。

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

我也尝试了相反的方法,只是通过 Jenkins 将“sudo chef-client”作为 shell 命令执行,即使这样我也收到了同样的错误。

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

谁能指导我。

【问题讨论】:

  • 您可以使用命令行连接到 Chef 服务器吗?首先尝试一下,然后尝试使用 Jenkins。

标签: jenkins chef-infra


【解决方案1】:

“主机密钥验证失败错误”很清楚,你的jenkins主机不知道目标服务器。

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

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

【讨论】:

    【解决方案2】:

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

    以下内容与从主厨服务器到节点的knife ssh 设置基本相同,除了您将主厨服务器/用户替换为詹金斯服务器/用户。

    以 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
      

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

    您希望在 Jenkins 上运行 chef-client 的每台机器都需要添加该公钥并测试手动 ssh 连接,直到它在不提示您的情况下工作。

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

    【讨论】:

    • 为了避免手动接受主机密钥,您也可以包含我的答案,我们是从 Windows 框中完成的,所以我们需要一些时间来检查。其余部分的真正完整答案。
    • 您好,感谢您的回复。我已按照您给出的所有步骤进行操作,但在运行最后一步时会抛出“sudo:不存在 tty 且未指定 askpass 程序”错误。
    • 这意味着sudo 仍在客户端上要求输入密码。在客户端本地尝试您的 sudo 命令并检查该客户端上的系统日志以了解被拒绝的内容。
    猜你喜欢
    • 2020-05-08
    • 2014-07-08
    • 2016-06-29
    • 2014-09-29
    • 2014-03-12
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多