2016-02-03 7 views
3

Мой рабочий процесс отправляет письма, когда он не работает с помощью try-catch. Я также разрешаю параллелизм, и при этом, когда несколько заданий одного и того же рабочего процесса входят в стадию дросселирования, новые отменяет старые. Это исключает "org.jenkinsci.plugins.workflow.steps.FlowInterruptedException" И отмененные задания также запускают уведомление по электронной почте.Попадание ошибок mulitple в рабочий процесс Jenkins

Теперь я изменил свой рабочий процесс, чтобы поймать конкретное исключение FlowInterruptedException и подавить уведомление по почте и позволить чему-либо еще инициировать почту, например.

node { 
try { 
// some stages for the workflow 
} 

catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e){ 

     echo "the job was cancelled or aborted" 
     } 

catch (err){ 
     stage 'Send Notification' 
     mail (to: '[email protected]', 
     subject: "Job '${env.JOB_NAME}' (${env.BUILD_NUMBER}) has had an error.", 
       body: "Some text", 
      mimeType:'text/html'); 
     currentBuild.result = 'FAILURE' 
    } 

} 

Это догоняет только FlowInterruptedException и когда работа действительно терпит неудачу из-за какой-либо другой причине (команда опечатка, и т.д.), я ожидал, что он будет пойман другой улов и запустит код внутри него, чтобы отправьте почту. Но это не так.

Я думаю, что у моего кода есть некоторые недостатки в попытке поймать. Есть идеи?

UPDATE:

Просто упаковывают, если я использую следующий код: он просто отправить почту только о каких-либо сбоев

node { 
try { 
// some stages for the workflow 
} 

catch (err){ 
     stage 'Send Notification' 
     mail (to: '[email protected]', 
     subject: "Job '${env.JOB_NAME}' (${env.BUILD_NUMBER}) has had an error.", 
       body: "Some text", 
      mimeType:'text/html'); 
     currentBuild.result = 'FAILURE' 
    } 

} 
+0

Я немного вычислил здесь. Но я бы не сказал это как решение. Фрагмент с работами 2-х ловушек, пока он возвращает некоторые конкретные исключения Хадсона (может быть, не правильный термин, я не являюсь java или groovy). Но если есть исключения, такие как исключения NoSuchMethod, ловушка не работает – OK999

+0

Ловкость только FlowInterruptedException представляется неоднозначной, см. Https://issues.jenkins-ci.org/browse/JENKINS-34376?#comment-268093. – kadrach

ответ

0

Вы можете поймать FlowInterruptedException - как вы делаете сейчас - и затем выберите один его причин (FlowInterruptedException#getCauses()) составляет org.jenkinsci.plugins.workflow.support.steps.StageStepExecution.CanceledCause, что означает, что поток был прерван во время ожидания ввода stage.

Любая другая комбинация является допустимой ошибкой, позволяющей отправлять уведомление по электронной почте.