2016-05-19 30 views
12

Non sono sicuro se si tratta della mia conoscenza limitata di Groovy o di una stranezza nel passaggio Pipeline parallel. Non posso farlo accettare failFast se uso map invece di passare ogni chiusura singolarmente:Utilizzo di failFast con interruzioni di mappa di chiusura passaggio "parallelo"

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'eccezione con failFast è:

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) 

risposta

14
map.failFast = true 
parallel map 
1

aiuta un po 'se si aggiunge il sintassi opzionale in. La seconda opzione è passare un nuovo Map mentre la terza opzione sta passando il tuo originale Map e un parametro con nome aggiuntivo. Onestamente non sono sicuro di cosa stia succedendo.

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

In ogni caso credo che la cosa più semplice sarebbe questo:

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

o ...

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