[英]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上的終端。
如果您還沒有私鑰/公鑰設置 ,請生成一個。
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連接詳細信息
“主機密鑰驗證失敗錯誤”非常清楚,您的jenkins主機不知道目標服務器。
在您的jenkins主機上(作為jenkins用戶)運行ssh-keyscan target_host > ~/.ssh/known_hosts
,然后重試,它應該按預期工作。
編輯:keyscan可能是jenkins本身的任務。 對於我假設您在Linux機器上運行jenkins的路徑,如果需要,請適應jenkins用戶主路徑或使用%HOME%代替〜
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.