Как правильно выполнить функцию в декларативном конвейере параллельно?
В нескольких сообщениях на этом форуме предлагается создать массив и передать массив в «параллельный» или передать функцию в 'параллельно'
Возможно ли создать параллельные этапы декларативного конвейера Jenkins в al oop?
Простое параллельное выполнение в Jenkins для массива
Я предпринял несколько попыток заставить его работать, но он всегда работает в последовательном режиме
Я думаю, что проблема в том, что функция оценивается во время создания массива, даже прежде чем я достигну «параллельного» этапа на стадии.
Я не смог найти решение из официальной документации.
https://jenkins.io/blog/2017/09/25/declarative-1/
Вот как я хотел бы, чтобы это работало, но возможно ли это?
pipeline {
agent {
label "l1" && "l2"
}
stages {
stage ('Prepare Data') {
// Some code that creates that data object
// data is an array of maps
data
}
stage ('Build') {
script {
def stepsForParallel = [:]
data.each { d ->
// name is a key in the data map
stepsForParallel["${d['name']}"] = {
node {
stage("${d['name']}") {
stepsForParallel[execDownStreamJob("DownStreamJobName", d)] = {
println("Executing DownstreamJob")
}
}
}
}
}
parallel stepsForParallel
}
}
}
}
}
Функция, приведенная ниже, на самом деле не входит в объем этого вопроса, но я добавил ее на всякий случай это предлагает некоторую ценность. Лучше всего это объясняется в этом посте: { ссылка }
// job is a string
// jobParameters is a hashmap
def execDownStreamJob(job, jobParameters) {
// Some parsing takes place on hashMap and creates the p object
// 'p' is passed to the 'build job' function as a parameter
def downStreamJobResult = build job: job, parameters: p, propagate: false
// Some try/catch logic
}