One benefit with sending email in pipeline script is better control of which error in the pipeline deserves sending email and to whom.
By adding a try-catch surrounding the code compile I send out email when it fails. That case the developers get notified only for errors that concern them.
try {
preInstall()
compileAndBuild()
postInstall()
} catch(e) {
final def RECIPIENTS = emailextrecipients([
[$class: 'DevelopersRecipientProvider'],
[$class: 'CulpritsRecipientProvider']
])
final def SUBJECT = "${env.JOB_NAME} ${env.BRANCH_NAME} - Build #${env.BUILD_NUMBER} - FAILED!"
final def CONTENT = "Check console output at ${env.BUILD_URL} to view the results."
if (RECIPIENTS != null && !RECIPIENTS.isEmpty()) {
mail to: RECIPIENTS, replyTo: "donot...@company.com", subject: SUBJECT, body: CONTENT
} else {
mail to: "jenkins-admin", replyTo: "donot...@company.com", subject: SUBJECT, body: CONTENT
}
throw e
}
I need to re-throw the exception otherwise the pipeline continues.
However I still want email to be sent out if there is an error anywhere in the code. The Jenkins administrators should get an email if the build scripts fails and has nothing to do with the code. I cannot put a try-catch everywhere in the code.
Also how do I send out email on fixed builds? Do I have to do it manually. Check the previous build, get the recipient list (culprits, developers) from that build and send a fixed build email message.