可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I have a pipeline with multiple steps, for example:
stage 'dev - compile' node('master') { //do something } stage 'test- compile' node('master') { //do something } stage 'prod- compile' node('master') { //do something }
I want to send a email if something goes wrong in the job, how can I send an email no matter where the error got triggered, something like:
try { /** all the code above **/ } catch(Exception e) { mail the error }
回答1:
Well, your idea is absolutely correct, you just need to move mail
after the catch
block or use finally
. Examples (in pseudocode):
try { //code email = 'success' } catch(Exception e) { // error handler: logging email = 'failure' } send email
Or the same approach using the catchError
pipeline built-in:
result = 'failure' catchError { // this catches all exceptions and set the build result //code result = 'success' // we will reach this point only if no exception was thrown } send result
Or using finally
:
try { //code } finally { send email }
回答2:
I think it is a better way to use the jenkins build in post section instead of using try catch:
pipeline { agent any stages { stage('whatever') { steps { ... } } } post { always { step([$class: 'Mailer', notifyEveryUnstableBuild: true, recipients: "[email protected]", sendToIndividuals: true]) } } } } }
回答3:
What I did to include useful information in my mail about the failure:
try { stage 'checkout cvs' node('master') { /** CODE **/ } stage 'compile' node('master') { /** CODE **/ } stage 'test unit' node('master') { /** CODE **/ } stage 'package' node('master') { /** CODE **/ } stage 'nexus publish' node('master') { /** CODE **/ } stage 'Deploy to App Server' node('master') { /** CODE **/ } } catch(e) { String error = "${e}"; // Make the string with job info, example: // ${env.JOB_NAME} // ${env.BUILD_NUMBER} // ${env.BUILD_URL} // and other variables in the code mail bcc: '', cc: '', charset: 'UTF-8', from: '', mimeType: 'text/html', replyTo: '', subject: "ERROR CI: Project name -> ${env.JOB_NAME}", to: "${mails_to_notify}", body: "${pivote}
\n\nMensaje de error: ${error}\n\n
Projecto: ${env.JOB_NAME}
Build Number: ${env.BUILD_NUMBER}
URL de build: ${env.BUILD_URL}"; error "${error}" }