Ответ 1
map.failFast = true
parallel map
Не уверен, что это мои ограниченные знания Groovy или причуда в шаге Pipeline parallel
. Я не могу заставить его принимать failFast
, если я использую карту вместо того, чтобы передавать каждое закрытие отдельно:
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.
Исключение с 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)
map.failFast = true
parallel map
Это немного помогает, если вы добавите дополнительный синтаксис. Второй вариант - это передача нового Map
, в то время как третий вариант передает ваш оригинальный Map
и дополнительный именованный параметр. Честно говоря, я не уверен, что он думает, что происходит.
parallel(map)
parallel([
spam: map['spam'],
eggs: map['eggs'],
failFast: true
])
parallel map, failFast: true
В любом случае я думаю, что самым простым было бы это:
def map = [
spam: {
node {
echo 'spam'
}
},
eggs: {
node {
echo 'eggs'
}
},
failFast: true
]
parallel map
или...
parallel ([
spam: {
node {
echo 'spam'
}
},
eggs: {
node {
echo 'eggs'
}
},
failFast: true
])
В дополнение к Джесси Глик ответ.
Даже если вы используете цикл for для создания параллельных этапов, вы можете использовать тот же код -
map.failFast = true
parallel map