2016-10-20 5 views
4

Iは以下のようにジェンキンスのパイプラインジョブの一部としてグルービースクリプトました:トリガされたすべての並列ジョブを待つパイプラインジョブの作成方法

node { 
    stage('Testing') { 
     build job: 'Test', parameters: [string(name: 'Name', value: 'Foo1')], quietPeriod: 2, wait: false 
     build job: 'Test', parameters: [string(name: 'Name', value: 'Bar1')], quietPeriod: 2, wait: false 
     build job: 'Test', parameters: [string(name: 'Name', value: 'Baz1')], quietPeriod: 2, wait: false 
     build job: 'Test', parameters: [string(name: 'Name', value: 'Foo2')], quietPeriod: 2, wait: false 
     build job: 'Test', parameters: [string(name: 'Name', value: 'Bar2')], quietPeriod: 2, wait: false 
     build job: 'Test', parameters: [string(name: 'Name', value: 'Baz2')], quietPeriod: 2, wait: false 
    } 
} 

ためfalseに設定さwaitフラグ、並列に複数の他のフリースタイルジョブを実行します。しかし、私はすべての仕事が終了したときに呼び出し元の仕事が終了するようにしたいと思います。現在、パイプラインジョブはすべてのジョブをトリガーし、数秒後に自己終了します。これは合計時間をトラッキングすることができず、すべてのトリガージョブを一度に取り消すことができないためです。

パラレルジョブがすべて完了したときにパイプラインジョブが終了するように上記のスクリプトを修正する方法を教えてください。

waitUntil {}ブロックでビルドジョブをラップしようとしましたが、動作しませんでした。

答えて

10

あなたはすべてのために待機します並列式は、完了するために、ジョブ/サブタスクを生み出しパイプラインを使用する必要があります。

stage('testing') { 
    def branches = [:] 

    for(i = 0; i < params.size(); i += 1) { 
     def param = params[i] 

     branches["Test${i}"] = { 
      build job: 'Test', parameters: [string(name: 'Name', value: param)], quietPeriod: 2 
     } 
    } 
    parallel branches 
} 

をあなたはjenkins.io

1

でパイプラインのドキュメントでは、いくつかのより多くの例を見つけることができますしかし、@agg3l's exampleです複数のジョブでは動作しません。

Map jobResults = [:] 

Boolean failedJobs = false 
def buildJobWithParams(def jobs_list, Map results) { 
    def branches = [:]  
    for(job in jobs_list) 
    { 
    print job 
    branches["Test-${job}"] = { 
     def jobBuild = build job: job, propagate: false 
     def jobResult = jobBuild.getResult() 
     echo "Build of '${job}' returned result: ${jobResult}" 
     results[job] = jobResult 
    } 
    }  
    return branches 
} 

stage('Run integration tests') { 
     steps { 
      def job_branch = buildJobWithParams(item_list, jobResults) 
      print job_branch 
      parallel job_branch 
      } 
} 

item_listには複数のジョブがありますが、最後のジョブは複数回実行されます。

+0

これまでに修正されたことがありますか?私は同じ行動を見ている@kenorb – Levi

関連する問題