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)
map.failFast = true
parallel map
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
])
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