0
我目前使用Chef's Jenkins supermarket cookbook來部署詹金斯的一個實例。作爲該部署的一部分,我的配方包括安裝Jenkins,安裝特定的插件版本,啓用安全性併爲Jenkins創建管理員帳戶。廚師:重構詹金斯安全腳本,以自己的食譜文件
我目前正在爲此使用單個配方文件。被執行,使安全性和創建管理員帳戶的腳本如下:
jenkins_script 'activate global security' do
command <<-EOH.gsub(/^ {4}/, '')
import jenkins.model.*
import hudson.security.*
def instance = Jenkins.getInstance()
def hudsonRealm = new HudsonPrivateSecurityRealm(false)
hudsonRealm.createAccount("Administrator","administrator_passwd")
instance.setSecurityRealm(hudsonRealm)
instance.save()
def strategy = new GlobalMatrixAuthorizationStrategy()
strategy.add(Jenkins.ADMINISTER, "Administrator")
instance.setAuthorizationStrategy(strategy)
instance.save()
EOH
notifies :restart, 'runit_service[jenkins]', :immediately
end
腳本激活的安全,創建帶有密碼的詹金斯管理員用戶,然後重新啓動詹金斯實例。據我所知,jenkins_script資源對Jenkins主執行Java或Groovy命令,並且不是冪等的。
由於腳本不是冪,如果配方的初始運行後的節點的後續時間運行,廚師,客戶端運行的安全性已啓用和管理員用戶已經創建失敗。
我的想法是將此安全性啓用腳本移至其自己的配方文件,然後在需要啓用安全性的情況下指定節點運行列表中安全性的配方。如果安全性已經啓用,我們簡單地不要在運行列表中添加/刪除安全配方。
- 這是一個健全的方法來解決這個問題?
- 如果這是一個完善的辦法,它應該是剛剛 創建另一個Ruby文件,在它傾倒的安全代碼, 其添加到節點的運行列表的配方後,初始 詹金斯安裝一樣簡單?
我已經注意到,當我實現了安全性,然後嘗試訪問我的Jenkins實例而不重新啓動時,顯示瞭解釋用戶缺少所需權限的錯誤消息。我無法繞過此錯誤消息,直到手動重新啓動Jenkins服務,甚至在訪問端口8080上的Jenkins時手動刷新瀏覽器後。 – J0991
奇怪。 IIRC它爲我工作沒有問題。也許是因爲當前Jenkins食譜版本的崩潰狀態(詹金斯的遠程更改)。 – StephenKing