2016-09-06 58 views
3

最近我開始使用Jenkinsfilepipeline plugin,我想知道在測試通過或合併時,要求我的salt master服務器運行命令的最佳方式是什麼例如拉請求。使用Jenkinsfile運行salt命令的最佳方法

有這jenkinsci/saltstack-plugin偉大的工作(不處理彩色輸出,但沒關係)。

  1. a。 Jenkinsfile內運行鹽步會更好嗎?
    b。 與上述插件交互的語法是什麼?

  2. 或者應該設置我的鹽主(這是一個不同的服務器上)作爲詹金斯從節點並命令在主鹽直接執行。

草案在這裏:

node("salt-master") { 
    sh "salt -E 'some.target.*' state.sls some.state" 
} 

我認爲,選擇2會的工作,但我還沒有設置主爲e詹金斯從呢。

回答

3

這是一個更新到舊的職位,但在情況下,它可以幫助任何人,因爲saltplugin作爲一個JenkinsFile一步語法上的詹金斯維基給出: https://wiki.jenkins-ci.org/display/JENKINS/saltstack-plugin

類似於下面的東西會給你prettyprint JSON輸出

import groovy.json.* 

node() { 
    saltresult = salt authtype: 'pam', clientInterface: local(arguments: '"ls -la"', blockbuild: true, 
function: 'cmd.run', jobPollTime: 16, target: '*', targetType: 'glob'), 
credentialsId: 'a3d814c2-84ed-4752-94a8-271791bb5375', servername: 'http://localhost:8000' 
    def prettyJson = JsonOutput.prettyPrint(saltresult) 
    println(prettyJson) 
} 

使用詹金斯插件的一個好處是,可以訪問其他鹽-API終點如鉤。我們的jenkins服務器位於內部網絡上,無法連接到互聯網,但我們的saltmaster位於另一個網絡上,能夠離開。在我們的JenkinsFiles中,我們可以發送一個salt hook調用,它會向saltmaster上的一個反應器發送一個通知給Slack或MS團隊。因此,我們的jenkins服務器能夠將構建狀態發佈到互聯網服務上,而本身不能訪問互聯網。

+0

噢,太棒了,我仍然在維護詹金斯服務器和鹽爪牙。自從它工作以來,我將這些命令保存爲手動shell命令,但輸出並不是很有趣。我現在肯定會使用插件來支持'Jenkinsfile'語法。非常感謝您的回答。我也會給'hook'調用和'reactor'一個嘗試,這是一個非常強大的功能,我沒有探索:) – GabLeRoux

2

JenkinsSaltStack都是我們CI/CD流程的核心。 Jenkins負責artifcats(deb s,rpm s,Docker圖像,靜態文件等),而SaltStack在我們的羣集中執行工件部署。 Jenkins羣集和SaltMaster居住在不同的主機。

不幸的是,我不知道Jenkinsfile(我們當前必須使用Jenkins 1.x),也不知道將SaltMaster轉換爲Jenkins從站。目前,我們的CD包含幾十個不同的Jenkins作業(由我們在後端的許多微服務),這些工作由相應的上游構建作業觸發。每個部署作業都有一個saltstack-plugin步驟。

SaltMaster在不同的端口上提供入口點 - SaltApi。可能是我們的/etc/salt/master可能是有用的某些部分:

external_auth: 
    pam: 
    jenkins: 
    - .* 

rest_cherrypy: 
    port: 8001 
    host: 0.0.0.0 

所以在我們的情況下,通過Jenkins驗證SaltAPISaltMaster和集羣之間啓動食鹽的RPC。由於我們的項目太複雜,管道不適合,因此沒有管道。

+0

感謝分享這個,我們一定會考慮使用'rest_cherrypy'。我仍然不確定我們是否更容易與奴隸或SaltApi合作,但直接與部署的API進行通信確實是一個好主意。 – GabLeRoux

相關問題