2017-06-15 58 views
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文件,在它傾倒的安全代碼, 其添加到節點的運行列表的配方後,初始 詹金斯安裝一樣簡單?

回答

0

您不必重新啓動Jenkins來配置安全性。

+0

我已經注意到,當我實現了安全性,然後嘗試訪問我的Jenkins實例而不重新啓動時,顯示瞭解釋用戶缺少所需權限的錯誤消息。我無法繞過此錯誤消息,直到手動重新啓動Jenkins服務,甚至在訪問端口8080上的Jenkins時手動刷新瀏覽器後。 – J0991

+0

奇怪。 IIRC它爲我工作沒有問題。也許是因爲當前Jenkins食譜版本的崩潰狀態(詹金斯的遠程更改)。 – StephenKing