2017-03-16 18 views
5

私は、宣言的パイプラインで動的なテストセットを起動する必要があります。 視覚化のために、各テストのステージを作成したいと思います。 これを行う方法はありますか?Jenkinsパイプラインでステージを動的に作成できますか?

私が知っている、ステージを作成するための唯一の方法は次のとおりです。

stage('foo') { 
    ... 
} 

私はthis exampleを見てきましたが、私はそれが宣言構文を使用していません。

答えて

9

宣言文がより詳細に文書化され、推奨されていても、宣言構文よりも柔軟性のあるスクリプト構文を使用してください。例えば、ステージのために

は、ループ内に作成することができます。

def tests = params.Tests.split(',') 
for (int i = 0; i < tests.length; i++) { 
    stage("Test ${testd[i]}") { 
     sh '....' 
    } 
} 
1

は、私は彼らにジェンキンスジョブが含まれている私のステージを生成するためにこれを使用しています。 build_listはJenkinsのメインジョブからトリガーしたいJenkinsジョブのリストですが、トリガーである各ジョブのステージがあります。

build_list = ['job1', 'job2', 'job3'] 
     for(int i=0; i < build_list.size(); i++) { 
      stage(build_list[i]){ 
       build job: build_list[i], propagate: false 
      } 
     } 
1

あなたはthis exampleを見てみたいことがあります - あなたは関数がそれに舞台を持つことができるはずクロージャを返すことができます。

このコードは概念を示していますが、ステージはありません。

def transformDeployBuildStep(OS) { 
    return { 
     node ('master') { 
     wrap([$class: 'TimestamperBuildWrapper']) { 
... 
     } } // ts/node 
    } // closure 
} // transformDeployBuildStep 

stage("Yum Deploy") { 
    stepsForParallel = [:] 
    for (int i = 0; i < TargetOSs.size(); i++) { 
     def s = TargetOSs.get(i) 
     def stepName = "CentOS ${s} Deployment" 
     stepsForParallel[stepName] = transformDeployBuildStep(s) 
    } 
    stepsForParallel['failFast'] = false 
    parallel stepsForParallel 
} // stage 
関連する問題