Je ne sais pas s'il s'agit de ma connaissance limitée de Groovy ou d'un hasard dans l'étape du pipeline parallel
. Je ne peux pas le faire accepter failFast
si j'utilise map au lieu de passer chaque fermeture individuellement:
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.
L'exception avec failFast
est:
Java.lang.IllegalArgumentException: Expected named arguments but got [{failFast=true}, {spam=org.jenkinsci.plugins.workflow.cps.CpsClosure2@51a382ad, eggs=org.jenkinsci.plugins.workflow.cps.CpsClosure2@718cb50d}]
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
Cela aide un peu si vous ajoutez la syntaxe optionnelle po. La deuxième option passe une nouvelle Map
tandis que la troisième option transmet votre Map
originale et un paramètre nommé supplémentaire. Honnêtement, je ne suis pas sûr de ce que cela pense.
parallel(map)
parallel([
spam: map['spam'],
eggs: map['eggs'],
failFast: true
])
parallel map, failFast: true
En tout cas, je pense que la chose la plus simple serait la suivante:
def map = [
spam: {
node {
echo 'spam'
}
},
eggs: {
node {
echo 'eggs'
}
},
failFast: true
]
parallel map
ou...
parallel ([
spam: {
node {
echo 'spam'
}
},
eggs: {
node {
echo 'eggs'
}
},
failFast: true
])
En plus de Jesse Glick répondre .
Même si vous utilisez une boucle for pour créer des étapes parallèles, vous pouvez utiliser le même code -
map.failFast = true
parallel map