Как обрабатывать исключения в начальном задании Jenkins Job DSL?

Если бы у меня был репозиторий Git, полный groovy-скриптов Job DSL и типичного начального задания, например:

job('seed') {
    //... scm, triggers etc.
    steps {
        dsl {
            external 'jobs/**/*.groovy'
        }
    }
    //... more config etc.
}

что произойдет, если хотя бы один из сценариев dsl задания по какой-то причине выдаст исключение, например:

job('deliberate-fail') {
    throw new Exception("Arrrgggghhh")
}

Можно ли обработать это исключение в начальном задании или все начальное задание завершится ошибкой?

Если все, кроме одного, будут работать, возможно ли, чтобы начальное задание записывало результат НЕСТАБИЛЬНЫЙ, а не НЕУДАЧНЫЙ?

Я действительно не хочу, чтобы одно паршивое яблоко испортило целую кучу.


person Mark McLaren    schedule 20.09.2017    source источник
comment
Вы пытались обернуть его простым блоком try-catch?   -  person Opal    schedule 21.09.2017
comment
Звучит многообещающе. Будет ли это внутри конкретных рабочих мест? Боюсь, я новичок в Groovy и Job DSL, поэтому я не совсем понял, что возможно. Если бы я поймал исключение, как бы я пометил сборку как нестабильную?   -  person Mark McLaren    schedule 21.09.2017
comment
Я обычно включаю его в конкретную работу. Использование currentBuild.result = 'UNSTABLE' должно выполнять эту работу.   -  person Opal    schedule 21.09.2017
comment
Блестяще, спасибо. Я попробую.   -  person Mark McLaren    schedule 21.09.2017
comment
Дайте мне знать, если это помогло вам. Я добавлю ответ тогда.   -  person Opal    schedule 21.09.2017
comment
Спасибо, Опал. Это действительно помогло, я добавил свой ответ ниже, но я чувствую, что должен вам очки репутации.   -  person Mark McLaren    schedule 21.09.2017
comment
Неважно ;) Рад, что у вас получилось!   -  person Opal    schedule 21.09.2017


Ответы (1)


Основываясь на предложении Опала использовать try-catch, я изменил задание, чтобы захватить исключение и вывести сообщение об ошибке на консоль.

job('deliberate-fail') {
    try {
        throw new Exception("Arrrgggghhh")
    } catch (Exception ex){
        println("deliberate-fail job is [UNSTABLE]")
    }
}

Поскольку в настоящее время я использую плагин Job DSL (а не Jenkins Pipeline script), я не думаю, что предложение Opal использовать "currentBuild.result = 'UNSTABLE'" было мне доступно. Немного покопавшись, я обнаружил, что могу использовать плагин Text-Finder. чтобы найти в консоли ошибку "[НЕСТАБИЛЬНАЯ]" и соответствующим образом изменить состояние начального задания.

job('seed-job') {
     steps {
        dsl {
            external '**/*_jobdsl.groovy'
        }
    }
    publishers {
        textFinder(/[UNSTABLE]/, '', true, false, true)
    }    
}

Немного запутанно, но, похоже, работает!

person Mark McLaren    schedule 21.09.2017