wake-up-neo.com

Durch die Verwendung von failFast mit einer Abschlussabbildung wird der Schritt "parallel" unterbrochen

Nicht sicher, ob es sich um meine begrenzten Kenntnisse von Groovy oder um eine Rätselhaftigkeit in Pipeline parallel step handelt. Ich kann nicht zulassen, dass failFast akzeptiert wird, wenn ich map benutze, anstatt jede Schließung einzeln zu übergeben:

def map = [:]
map['spam'] = {
    node {
        echo 'spam'
    }
}
map['eggs'] = {
    node {
        echo 'eggs'
    }
}
parallel map // Works.
parallel spam: map['spam'], eggs: map['eggs'], failFast: true // Works.
parallel map, failFast: true // Fails with exception.

Die Ausnahme bei failFast ist:

Java.lang.IllegalArgumentException: Expected named arguments but got [{failFast=true}, {[email protected], [email protected]}]
    at org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.Java:276)
    at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.Java:111)
12
Constantin
map.failFast = true
parallel map
20
Jesse Glick

Es hilft ein wenig, wenn Sie die optionale Syntax hinzufügen. Die zweite Option übergibt eine neue Map, während die dritte Option Ihre ursprüngliche Map und einen zusätzlichen benannten Parameter übergibt. Ehrlich gesagt bin ich mir nicht sicher, was es vorhat.

parallel(map)
parallel([
    spam: map['spam'],
    eggs: map['eggs'],
    failFast: true
])
parallel map, failFast: true

Auf jeden Fall denke ich, das Einfachste wäre:

def map = [
    spam: {
        node {
            echo 'spam'
        }
    },
    eggs: {
        node {
            echo 'eggs'
        }
    },
    failFast: true
]
parallel map

oder...

parallel ([
    spam: {
        node {
            echo 'spam'
        }
    },
    eggs: {
        node {
            echo 'eggs'
        }
    },
    failFast: true
])
1
Captain Man

Neben Jesse Glicks answer .

Selbst wenn Sie eine for-Schleife verwenden, um parallele Stufen zu erstellen, können Sie denselben Code verwenden. 

map.failFast = true
parallel map
0
ashwaqar