Currying groovy CPS encerramento para execução paralela

Fazemos alguma criação dinâmica de etapas paralelas em alguns de nossos trabalhos. Graças aesta discussão Eu descobri como criar dinamicamente o mapa com parâmetros para uso na etapa paralela.

No entanto, agora eu queria reutilizar partes do código que é usado para criar essas etapas paralelas. Por isso, sinto que precisaria curry os fechamentos.

No entanto, o curry parece não funcionar corretamente. Fazer referência à variável de loop (valueCopy) dentro do fechamento faz a coisa certa (como mencionado aqui), mas o curry não faz o que eu esperava.

Estou fazendo algo errado, isso ainda não é suportado? Existem soluções alternativas? Provavelmente isso é um bug no pipeline de Jenkins?

Espero que alguém tenha uma idéia de por que isso não funciona e / ou como fazê-lo funcionar.

Jenkins: LTS (2.32.1) e atualizações mais recentes de plug-ins a partir de 19/01/2017.

Solução:

Após a atualização para o Pipeline: Groovy plugin versão 2.40, tudo está funcionando conforme o esperado agora.

Script de pipeline executado:

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()

Resultado:

[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

Saída esperada:

[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

questionAnswers(3)

yourAnswerToTheQuestion