Использование failFast с картой замыкания прерывает параллельный шаг

Не уверен, что это мои ограниченные знания 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}, {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)

person Constantin    schedule 19.05.2016    source источник
comment
Есть ли способ ограничить количество потоков при параллельном запуске?   -  person anukuls    schedule 02.11.2018


Ответы (2)


Это немного поможет, если вы добавите необязательный синтаксис. Второй вариант — передать новый 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

or...

parallel ([
    spam: {
        node {
            echo 'spam'
        }
    },
    eggs: {
        node {
            echo 'eggs'
        }
    },
    failFast: true
])
person Captain Man    schedule 29.03.2017

В дополнение к ответу Джесси Глика.

Даже если вы используете цикл for для создания параллельных этапов, вы можете использовать тот же код -

map.failFast = true
parallel map
person Ashwaq    schedule 19.12.2018