Я пытаюсь создать динамически параллельные шаги в конвейере Jenkins из коллекции.
Когда я запускаю sh кодовый блок без присвоения переменной, все работает нормально.
Когда я присваиваю sh код переменной и затем пытаюсь его выполнить - тогда для каждого параллельного шага используйте последний элемент в коллекции.
CLUSTERS="192.168.0.1,192.168.0.2|127.0.0.1,127.0.0.2"
Работа как положено:
stage("Run Repair") {
environment { CLUSTERS = findClusters() }
steps {
script {
def splitted_clusters = CLUSTERS.split('\\|')
def stepsForParallel = splitted_clusters.collectEntries {
echo "Non parallel ${it}"
["Repair ${it}" : {sh(script: """ echo "parallel: Found cluster with IPs: ${it}" """)}]
}
echo "Start parallel:"
parallel stepsForParallel
}
}
}
Выход:
Non parallel 192.168.0.1,192.168.0.2
Non parallel 127.0.0.1,127.0.0.2
Start parallel:
[Repair 192.168.0.1,192.168.0.2] Running shell script
[Repair 192.168.0.1,192.168.0.2] Found cluster with IPs: 192.168.0.1,192.168.0.2
[Repair 127.0.0.1,127.0.0.2] Running shell script
[Repair 127.0.0.1,127.0.0.2] Found cluster with IPs: 127.0.0.1,127.0.0.2
Не работает:
stage("Run Repair") {
environment { CLUSTERS = findClusters() }
steps {
script {
def splitted_clusters = CLUSTERS.split('\\|')
def stepsForParallel = splitted_clusters.collectEntries {
command = """ echo "Found cluster with IPs: ${it}" """
echo "Non parallel ${it}"
["Repair ${it}" : {sh(script: command)}]
}
echo "Start parallel:"
parallel stepsForParallel
}
}
}
Неверный вывод:
Non parallel 192.168.0.1,192.168.0.2
Non parallel 127.0.0.1,127.0.0.2
Start parallel:
[Repair 192.168.0.1,192.168.0.2] Running shell script
[Repair 192.168.0.1,192.168.0.2] Found cluster with IPs: 127.0.0.1,127.0.0.2
[Repair 127.0.0.1,127.0.0.2] Running shell script
[Repair 127.0.0.1,127.0.0.2] Found cluster with IPs: 127.0.0.1,127.0.0.2
Итак, я пытаюсь понять, что скрывается за этим поведением?