Как запустить задание несколько раз параллельно в зависимости от значения параметра конвейера

Я хочу запустить задание main_job N раз параллельно из конвейера main_pipeline в зависимости от параметра N. Но я не могу обойти ошибки Дженкинса, когда он допускает цикл «for» в блоках сценария, но не в «параллельном» блоки.

Я пробовал использовать всю смесь блоков скрипт / параллель / этап.

pipeline {
  agent any
  stages {
    stage("All jobs") {
      parallel {
        script {
          def numJobs = "${N}" as Integer
          for(def curJob=1; curJob<=numJobs; i++) {
            def param = "JOB-" + curJob
            script {
              build (job: "main_job",
                     parameters: [string(name:"PARAM", value:param)])
            }
          }
        }
      }
    }
  }
}

Используя другую комбинацию сценария / этапа / параллели, я получаю разные ошибки относительно того, какие блоки ожидаются. Один из примеров ошибки:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: xx: Expected a stage @ line xx, column xx.
               script {
               ^

WorkflowScript: xx: Expected one of "steps", "stages", or "parallel" for stage "All jobs" @ line xx, column xx.
           stage("All jobs") {

person lucifer    schedule 06.08.2019    source источник


Ответы (1)


Хорошо, я наконец нашел то, что мне нужно было сделать, в основном методом проб и ошибок и обнаружив, что parallel можно вызвать как функцию, передав словарь с подробностями для всех выполняемых заданий.

Окончательный код выглядит так:

pipeline {
    agent any
    parameters {
        string(
            name: 'N',
            defaultValue:"2",
            description: "The number of jobs to run"
        )
    }
    stages {
    stage("All jobs") {
        steps {
        script {
          def numJobs = "${N}" as Integer
          def allJobs = [:]
          for(def curJob=1; curJob<=numJobs; curJob++) {
            def jobName = "JOB-" + curJob
            allJobs[jobName] =  {
              build (job: "main_job",
                    parameters:
                    [string(name:"PARAM", value:jobName)])
            }
          }
          parallel(allJobs)
        }
      }
    }
  }
}
person lucifer    schedule 20.08.2019