2016-09-06 14 views
3

最近Jenkinsfilepipeline pluginで作業を始めました。テストが合格したとき、またはマージするときにsaltマスターサーバーにコマンドを実行するように頼むにはどうすればよいでしょうか例えば、プル要求。Jenkinsfileを使ってsaltコマンドを実行する最良の方法

これはjenkinsci/saltstack-pluginで、うまく動作します(カラー出力は処理されませんが問題ありません)。

  1. a。 Jenkinsfileの中で塩ステップを実行する方が良いでしょうか?
    b。 上記のプラグインとやりとりするための構文は何でしょうか?

  2. それとも(別のサーバー上にある)私はセットアップ私のソルトマスターべきジェンキンススレーブノードなどと直接塩マスター上で実行したコマンドを持っています。ここ

ドラフト:

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

私はオプション2が働くだろうと思いますが、私はまだ電子のジェンキンススレーブとしてではないのセットアップマスターを持っています。

答えて

3

これは古い記事へのアップデートですが、JenkinsFileのステップは、ジェンキンスウィキに与えられているように、ケースには、それは誰も、saltpluginの構文を支援します。次のような https://wiki.jenkins-ci.org/display/JENKINS/saltstack-plugin

何かが得られますジェンキンスプラグインを使用することの利点は、あなたがそのようなフックなどの他の塩のAPIエンドポイントにアクセスできることであるあなた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) 
} 

。私たちはインターネットに接続できない内部ネットワーク上にジェンキンスサーバーを持っていますが、私たちのソルトマスターは別のネットワーク上にあり、出ることができます。私たちのJenkinsFilesでは、ソルトレークコールを送信することができます。これは、ソルトマスターのリアクターを蹴ってスラックまたはMSチームに通知を送信します。したがって、私たちのjenkinsサーバーは、インターネットにアクセスすることなく、インターネットサービスにビルドステータスを投稿することができます。

+0

ああ、私はまだジェンキンスのサーバーと塩のミニオンを維持しています。私はそれが働いてから手動のシェルコマンドとしてコマンドを保存しましたが、出力は本当に楽しいものではありませんでした。 'Jenkinsfile'構文をサポートするようになりましたので、私は間違いなくプラグインを使用します。あなたの答えに感謝します。私も 'フック'コールと 'リアクター'試し、私はまだ探っていない非常に強力な機能を与える:) – GabLeRoux

2

JenkinsSaltStackは、私たちのCI/CDプロセスの中核です。 Jenkinsはartifcats(debs、rpms、Dockerイメージ、静的ファイルなど)を担当し、SaltStackは、私たちのクラスタ間でアーティファクトの展開を実行します。 JenkinsクラスタとSaltMasterは異なるホストに存在します。

は、残念ながら、私は(我々は現時点ではJenkins 1.xを使用するためにバインドされている)Jenkinsfileの、またJenkinsスレーブにSaltMasterを回すのオプションのどちらも認識していませんよ。現在、私たちのCDは、数十件の異なるJenkinsジョブ(私たちがバックエンドで持っているいくつかのマイクロサービスによる)で構成されています。すべての展開ジョブにはsaltstack-pluginのステップがあります。

SaltMasterは、別個のポート(SaltApi)にエントリポイントを提供します。当社/etc/salt/masterの一部かもしれ役に立つかもしれません:

external_auth: 
    pam: 
    jenkins: 
    - .* 

rest_cherrypy: 
    port: 8001 
    host: 0.0.0.0 

だから我々の場合にはJenkinsSaltAPI経由SaltMasterに認証し、クラスタ間で共通塩RPCを起動します。私たちのプロジェクトは複雑すぎるし、パイプラインもうまく適合しないので、パイプラインはありません。

+0

これを共有していただきありがとうございます。私たちは間違いなく 'rest_cherrypy'を使用します。私たちが奴隷や 'SaltApi'と一緒に行く方が簡単かどうかはまだ分かりませんが、展開のためにapiと直接通信することは本当に良い考えです。 – GabLeRoux

関連する問題