Curry cierre CPS maravilloso para ejecución paralela

Hacemos una creación dinámica de pasos paralelos en algunos de nuestros trabajos. Gracias aeste hilo Encontré cómo crear dinámicamente el mapa con parámetros para usar en el paso paralelo.

Sin embargo, ahora quería reutilizar partes del código que se usa para crear esos pasos paralelos. Para esto, siento que necesitaría curry los cierres.

Sin embargo, el curry parece no funcionar correctamente. Hacer referencia a la variable de bucle (valueCopy) dentro del cierre hace lo correcto (como se menciona aquí) pero curry no hace lo que esperaría.

¿Estoy haciendo algo mal? ¿Esto no es (todavía) compatible, hay alguna solución? ¿Es esto probablemente un error en la tubería de Jenkins?

Espero que alguien tenga idea de por qué esto no funciona y / o cómo hacerlo funcionar.

Jenkins: LTS (2.32.1) y las últimas actualizaciones de complementos a partir del 2017/01/19.

Solución:

Después de actualizar a Pipeline: Groovy plugin versión 2.40 todo funciona ahora como se esperaba.

Script de canalización ejecutado:

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

Salida:

[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

Rendimiento esperado:

[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

Respuestas a la pregunta(3)

Su respuesta a la pregunta