try / catch / finally маскирует проблемы Jenkinsfile в случае исключений компилятора Groovy

У меня есть код, аналогичный приведенному ниже, в моем файле Jenkins:

node {
   checkout scm
   // do some stuff
   try {
       // do some maven magic
   } catch (error) {
       stage "Cleanup after fail"
       emailext attachLog: true, body: "Build failed (see ${env.BUILD_URL}): ${error}", subject: "[JENKINS] ${env.JOB_NAME} failed", to: '[email protected]'
       throw error
   } finally {
       step $class: 'JUnitResultArchiver', testResults: '**/TEST-*.xml'
   }
}

Если приведенный выше код не работает из-за некоторых ошибок, связанных с конвейером Дженкинса в try { } (например, с использованием неутвержденного статического метода), сценарий завершается с ошибкой. Когда я удаляю команду try / catch / finally, я вижу ошибки. Я делаю что-то неправильно? Разве повторное error не должно приводить к появлению ошибок конвейера в журнале?

РЕДАКТИРОВАТЬ: Мне удалось решить проблему с помощью отличного синтаксиса, когда, например, Я использую переменную, которая еще не назначена. Пример: echo foo Если foo нигде не объявлен / не назначен, Jenkins завершит сборку с ошибкой и не покажет причину, если она находится внутри try / catch / finally, которая повторно генерирует исключение.


person Krzysztof Krasoń    schedule 16.05.2016    source источник
comment
Если бы это был простой Groovy, да, это сработало бы, но поскольку это Groovy DSL, исполнитель DSL может делать все, что хочет, за исключением ... Может, вам стоит попробовать вместо этого: jenkins.io/doc/pipeline/steps/workflow-basic- шаги /   -  person Renato    schedule 16.05.2016
comment
@RenatoBut jenkins.io/doc/pipeline/steps/workflow-basic-steps/ Предлагает также попробовать / catch / finally.   -  person Krzysztof Krasoń    schedule 16.05.2016
comment
Верно, но если у вас есть эта проблема, похоже, что это не так ...   -  person Renato    schedule 16.05.2016
comment
Вам удалось решить эту проблему? У меня точно такая же проблема, и я не смог придумать код, который сохраняет форму результатов сборки внутри блока try.   -  person sorin    schedule 31.05.2016
comment
как получить вывод ошибки оболочки из блока try в переменную. stackoverflow.com/questions/42786894/   -  person jugal    schedule 16.03.2017
comment
stackoverflow.com/a/42828546/106402   -  person treehouse    schedule 25.08.2017


Ответы (1)


Это происходит, когда дополнительное исключение создается внутри блока finally или перед повторным вызовом внутри catch. В этих случаях RejectedAccessException проглатывается, а script-security не ловит его.

person amuniz    schedule 26.05.2016
comment
В конце концов, внутри не возникает никаких исключений, потому что это работает правильно, когда я удаляю некорректную строку в блоке try. - person Krzysztof Krasoń; 26.05.2016
comment
Тогда это должно быть до повторного броска в ловушку. - person amuniz; 31.05.2016
comment
Нет, легко воспроизвести, если отличный сценарий использует, например, необъявленная переменная. Нет трассировки стека исключений, когда я удаляю try / catch / finally, я получаю трассировку стека. - person Krzysztof Krasoń; 31.05.2016
comment
Навскидку это похоже на ошибку. Если есть минимально воспроизводимый тестовый пример, отправьте его как таковой. - person Jesse Glick; 06.06.2016