2016-05-19 3 views
12

nicht sicher, ob es mein begrenztes Wissen über Groovy ist oder eine Marotte in Pipeline parallel Schritt. Ich kann es nicht failFast machen akzeptieren, wenn ich Karte verwenden, anstatt jede Schließung vorbei individuell:Mit FAILFAST mit Verschluss Karte breaks „parallel“ Schritt

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

Antwort

14
map.failFast = true 
parallel map 
1

Es hilft ein wenig, wenn Sie das hinzufügen optionale Syntax in. die zweite Option ist vorbei eine neue Map während die dritte Option ist Ihre ursprüngliche Map und einen zusätzlichen benannten Parameter übergeben. Ehrlich gesagt bin ich nicht sicher, was es denkt los ist.

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

Auf jeden Fall denke ich, die einfachste Sache sein würde:

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 
]) 
Verwandte Themen