簡體   English   中英

廚師與詹金斯整合

[英]Chef Integration with Jenkins

我正在嘗試將廚師與詹金斯整合。

我的情況是,我在Chef中創建了一些食譜,並希望通過Jenkins執行廚師運行列表。 我在Jenkins中安裝了廚師插件( https://github.com/melezhik/chef-plugin/ ),並提供了所需的參數。 但是,當我現在在Jenkins中構建時,它會拋出“主機密鑰驗證失敗錯誤”。

我還嘗試通過Jenkins執行“sudo chef-client”作為shell命令來反過來,即使這樣我也收到同樣的錯誤。

此外,我嘗試將Jenkins放在可用廚師節點的同一服務器上,即使問題仍然存在。

任何人都可以指導我這個。

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 '' 

    然后將公鑰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-clientroot

     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 ssh_config配置主機特定的ssh連接詳細信息

“主機密鑰驗證失敗錯誤”非常清楚,您的jenkins主機不知道目標服務器。

在您的jenkins主機上(作為jenkins用戶)運行ssh-keyscan target_host > ~/.ssh/known_hosts ,然后重試,它應該按預期工作。

編輯:keyscan可能是jenkins本身的任務。 對於我假設您在Linux機器上運行jenkins的路徑,如果需要,請適應jenkins用戶主路徑或使用%HOME%代替〜

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM