2017-01-07 5 views
1

私はプロジェクト-a、プロジェクト-b、プロジェクト-cの3つのパイプラインプロジェクトを持っています。 project-cはパラメータをとります。プロジェクト-aまたはプロジェクト-bのいずれかが正常に完了したら、パラメータ付きのプロジェクト-cのビルドをトリガーしたいと思います。ジェンキンスで成功したビルドでパラメータ化されたビルドをトリガする方法は?

私はパイプラインでこのコードをプロジェクトAとプロジェクトBでこれを行うことができます。

stage('trigger-project-c') { 
    def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']] 
} 

をしかし、これは2つの執行が必要です。私は、project-aまたはproject-bをプロジェクト-cをパラメータで実行する前に完全に終了させたい。

答えて

3

はあなたのパイプラインは、最も可能性の高い次のようになります。

node { 
    stage('build') { 
    // sh "make" 
    } 

    // ... 

    stage('trigger-project-c') { 
     def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']] 
    } 
} 

nodeクロージャ内のすべてのものを包むことにより、下流の仕事project-cがエグゼキュータを解放/上流のジョブが一時停止されることなく、インラインでトリガされます。

したがって、長い間本質的に何もしないものは、実行者をブロックしないように、nodeのステップの中にラップするべきではありません。非常によく似たケースはusing the input step to wait for user feedbackです。

代わりに、パイプラインはたとえば次のようになります。そう言うために - - である、次のようにベストプラクティス(あなたのエグゼキュータをブロックしないよう):

stage('build') { 
    node { 
    // sh "make" 
    } 
} 

// or 

node { 
    stage('build') { 
    // sh "make" 
    } 

    stage('unit') { 
    // sh "make" 
    } 
} // node 

// note: the following code is _not_ wrapped inside a `node` step 
stage('trigger-project-c') { 
    def job = build job: 'project-c', parameters: [[$class: 'StringParameterValue', name: 'MY_PARAM', value: 'somevalue']] 
} 

nodebuildステップをラップする必要はありません、すなわち、のためにexecutorをブロックしますそれ。他のステップ(shなど)では、パイプラインの実行によってエラーが発生し、node割り当ての外で実行できないことを通知します。

+0

説明をいただきありがとうございます。 –

1

wait: falsebuildのステップに追加すると、下流のジョブを待たずにパイプラインの実行を続行できます。

EDIT:これは、このパイプラインの他のダウンストリームジョブの成功を気にしない場合に役立ちます。それが完了するまで待つ必要がある場合は、自分の(上流の仕事の)パイプラインを続け、私の他の答えを参照してください。

+0

ダウンストリームジョブはこのまま実行を続けますが、次のプロジェクトを実行するためにエグゼキュータを解放しません。したがって、私がJenkinsにエグゼキュータを1人だけ持ち、 'project-a'を実行するように設定した場合、' project-c'はそれ自身のエグゼキュータを必要とするため、ジョブは決して完了しません。 –

+0

そして、 'node'と' stage'の順序を変更する必要があります。 'node'クロージャ内ではなく、フライウェイトエクゼキュータ内で' build'を実行してください。 – StephenKing

+0

これはうまく動作しますが、私はフライウェイト実行者でプロジェクトを実行してベストプラクティスを打ち破っていると少し気になります。あなたはフライウェイト・エグゼキュータなしでこれを達成する別の方法を知っていますか?私はパラメータ化されたトリガープラグインのようなものを実際に探していると思います。これまで試したことはありません。 –

関連する問題