плагин (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