2017-03-19 15 views
1

パラレルで数字の(パラメータで設定可能な)ジョブを実行する宣言型パイプラインを作成しようとしていますが、並列部分に問題があります。宣言型パイプラインの動的なステップ数の動的数

基本的には、いくつかの理由については、以下のパイプラインがエラー

Nothing to execute within stage "Testing" @ line .., column .. 

を生成し、私はなぜ理解できない、またはそれを解決する方法について説明します。

import groovy.transform.Field 
@Field def mayFinish = false 

def getJob() { 
    return { 
     lock("finiteResource") { 
      waitUntil { 
       script { 
        mayFinish 
       } 
      } 
     } 
    } 
} 

def getFinalJob() { 
    return { 
     waitUntil { 
      script { 
       try { 
        echo "Start Job" 
        sleep 3 // Replace with something that might fail. 
        echo "Finished running" 
        mayFinish = true 
        true 
       } catch (Exception e) { 
        echo e.toString() 
        echo "Failed :(" 
       } 
      } 
     } 
    } 
} 

def getJobs(def NUM_JOBS) { 
    def jobs = [:] 
    for (int i = 0; i < (NUM_JOBS as Integer); i++) { 
     jobs["job{i}"] = getJob() 
    } 
    jobs["finalJob"] = getFinalJob() 
    return jobs 
} 

pipeline { 
    agent any 
    options { 
     buildDiscarder(logRotator(numToKeepStr:'5')) 
    } 
    parameters { 
     string(
      name: "NUM_JOBS", 
      description: "Set how many jobs to run in parallel" 
     ) 
    } 
    stages { 
     stage('Setup') { 
      steps { 
       echo "Setting it up..." 
      } 
     } 
     stage('Testing') { 
      steps { 
       parallel getJobs(params.NUM_JOBS) 
      } 
     } 
    } 
} 

古いパイプラインでこれを行う例はたくさんありますが、宣言的ではありません。 誰かが間違っていることを知っていますか?

+0

なぜ番号を外していますか?それは有用な情報ではありませんか?最小限の例を試しましたか? – StephenKing

答えて

2

現時点では、宣言パイプラインを使用するときに、parallelブランチを動的に提供することはできないようです。

scriptブロック内でgetJobs()と呼び出して、同じエラーメッセージが表示される先のstageがある場合でも、

この場合、スクリプト化されたパイプラインを使用する必要があります。

+1

それは私が聞きたかったものではありませんでしたが、少なくとも私が扱えるものです。ありがとう。 – fredrik

関連する問題