Мы выполняем динамическое создание параллельных шагов на некоторых наших работах. Благодаря this thread я нашел, как динамически создавать карту с параметрами для использования на параллельном шаге.Currying groovy Закрытие CPS для параллельного выполнения
Однако теперь я хотел повторно использовать части кода, которые используются для создания этих параллельных шагов. Для этого я чувствую, что мне нужно будет закрепить закрытие.
Однако карри кажется неправильным. Ссылка на переменную цикла (valueCopy) внутри закрытия делает правильную вещь (as mentioned here), но currying не делает то, что я ожидаю.
Я делаю что-то неправильно, это просто не поддерживается (пока), есть ли какие-нибудь обходные пути? Возможно, это ошибка в трубопроводе Дженкинса?
Надеюсь, что кто-нибудь подскажет, почему это не работает и/или как заставить его работать.
Jenkins: LTS (2.32.1) & последние обновления плагинов от 2017/01/19.
Pipeline скрипт выполняется:
Защиту echoSome (значение) { эхо вал }
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
Спасибо за ответ. По какой-то причине меня не уведомили :(Я постараюсь попробовать как можно скорее. –
Отмечено так, как это было решено, поскольку это действительно решает мой вопрос. К сожалению, я пропустил упоминание об этом, конечно, я хотел бы использовать код CPS внутри параллельные замыкания :( –