плагин (2.40) в сочетании как минимум с Jenkins версии 2.60.3 (работает, хотя на домашней странице плагинов указано, что вам нужен как минимум Jenkins 2.73.3) все работает как положено.
лаем динамическое создание параллельных шагов в некоторых из наших работ. Благодаряэта тема Я нашел, как динамически создавать карту с параметрами для использования в параллельном шаге.
Однако теперь я хотел повторно использовать части кода, который используется для создания этих параллельных шагов. Для этого я чувствую, что мне нужно карри закрытия.
Однако карри, кажется, не работает правильно. Ссылка на переменную цикла (valueCopy) внутри замыкания делает правильную вещь (как упомянуто здесь) но карри не делает то, что я ожидал.
Я что-то не так делаю, это просто (пока) не поддерживается, есть ли обходные пути? Возможно, это ошибка в конвейере Jenkins?
Надеюсь, кто-нибудь знает, почему это не работает и / или как заставить это работать.
Jenkins: LTS (2.32.1) и последние обновления плагинов от 2017/01/19.
Решение:После обновления до Pipeline: плагин Groovy версии 2.40 все работает, как и ожидалось.
Выполнен конвейерный скрипт:
def echoSome(val) {
echo val
}
def buildClosures() {
def someList = ["1", "2", "3"]
def closures = [:]
for (value in someList) {
final valueCopy = value
closures[value] = {val ->
echo valueCopy.toString()
echo val.toString()
}.curry(value)
}
closures
}
parallel buildClosures()
Выход:
[Pipeline] parallel
[Pipeline] [1] { (Branch: 1)
[Pipeline] [2] { (Branch: 2)
[Pipeline] [3] { (Branch: 3)
[Pipeline] [1] echo
[1] 1
[Pipeline] [1] echo
[1] 3
[Pipeline] [1] }
[Pipeline] [2] echo
[2] 2
[Pipeline] [2] echo
[2] 3
[Pipeline] [2] }
[Pipeline] [3] echo
[3] 3
[Pipeline] [3] echo
[3] 3
[Pipeline] [3] }
[Pipeline] // parallel
[Pipeline] End of Pipeline
Finished: SUCCESS
Ожидаемый результат:
[Pipeline] parallel
[Pipeline] [1] { (Branch: 1)
[Pipeline] [2] { (Branch: 2)
[Pipeline] [3] { (Branch: 3)
[Pipeline] [1] echo
[1] 1
[Pipeline] [1] echo
[1] 1
[Pipeline] [1] }
[Pipeline] [2] echo
[2] 2
[Pipeline] [2] echo
[2] 2
[Pipeline] [2] }
[Pipeline] [3] echo
[3] 3
[Pipeline] [3] echo
[3] 3
[Pipeline] [3] }
[Pipeline] // parallel
[Pipeline] End of Pipeline
Finished: SUCCESS