我的工作流程在使用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'
}
}
答案 0 :(得分:0)
您可以抓住FlowInterruptedException
- 正如您现在所做的那样 - 然后检查其中一个原因(FlowInterruptedException#getCauses()
)是org.jenkinsci.plugins.workflow.support.steps.StageStepExecution.CanceledCause
,这意味着流程在等待进入时被中断stage
步骤。
任何其他组合都是有资格发送通知电子邮件的合法错误。