В декларативном конвейере можно ли выполнить параллельный этап, на котором один и тот же код выполняется произвольное количество раз (на произвольном числе узлов)? - PullRequest
0 голосов
/ 02 мая 2020

У меня есть конвейер, который делает несколько вещей, но в конце сборки я хотел бы запустить тесты на нескольких копиях одного и того же узла сборки. Все эти тесты будут идентичны, и все они будут выполняться на клонах fre sh одной и той же виртуальной машины.

Может ли параллельный блок что-то сделать в такой степени? Насколько я могу судить, я мог бы сделать что-то вроде этого:

...
stage('Parallel Testing'){
    parallel{
        stage('Run1'){
            agent{
                label "my_test_machines"
            }
            steps{
                run_my_tests()
            }
        }
        stage('Run2'){
            agent{
                label "my_test_machines"
            }
            steps{
                run_my_tests()
            }
        }
        ...
    }
}
...

Но это, очевидно, довольно уродливо и было бы ужасно, если бы я хотел сделать больше, чем несколько параллельных узлов. Есть ли какой-нибудь способ заставить параллельную {} работать на a для l oop, или иным образом создать произвольное количество этапов / узлов?

1 Ответ

0 голосов
/ 03 мая 2020

Вы можете запрограммировать свои параллельные этапы следующим образом:

stage('Parallel Testing') {
   steps {
      script {
         def builders = getParallelBuilders()
         parallel builders
      }
   }
}

, где

def getParallelBuilders() {
    def builders = [:].asSynchronized()
    def my_runs = ["Run1", "Run2", "Run3"]

    my_runs.each { stage_name -> 
        def final_name = stage_name
        builders[final_name] = {
            stage (final_name) {
                node("my_test_machines") {
                   run_my_tests()
                }
            }
        }
    }
    return builders
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...