在Jenkins工作流程中捕获多个错误

时间:2016-02-03 22:27:56

标签: jenkins groovy jenkins-pipeline jenkins-groovy

我的工作流程在使用try-catch失败时发送邮件。我也启用了并发性,当此相同工作流的多个作业进入限制阶段时,新的作业将取消旧的作业。抛出"org.jenkinsci.plugins.workflow.steps.FlowInterruptedException"的例外,取消的作业也会触发邮件通知。

现在我已经修改了我的工作流程以捕获特定的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: 'adminj...@somename.com', 
         subject: "Job '${env.JOB_NAME}' (${env.BUILD_NUMBER}) has had an error.", 
              body: "Some text", 
            mimeType:'text/html'); 
         currentBuild.result = 'FAILURE' 
     } 

}

这只捕获FlowInterruptedException,当作业由于任何其他原因(命令拼写错误等)确实失败时,我预计它将被其他捕获捕获并将触发其中的代码发送邮件。但事实并非如此。

我认为我的代码在try catch中有一些缺陷。有什么想法吗?

更新:

如果我使用以下代码,它只是发送邮件几乎任何失败

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

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

}

1 个答案:

答案 0 :(得分:0)

您可以抓住FlowInterruptedException - 正如您现在所做的那样 - 然后检查其中一个原因(FlowInterruptedException#getCauses())是org.jenkinsci.plugins.workflow.support.steps.StageStepExecution.CanceledCause,这意味着流程在等待进入时被中断stage步骤。

任何其他组合都是有资格发送通知电子邮件的合法错误。