in vars/jenkinsNotify.groovy [22:116]
def call(Map params = [:]) {
echo "Build result: ${currentBuild.currentResult}"
// determine the message details
def providers
def messageBody
def messageTail = ''
def messageSubject
def sendMail
switch(currentBuild.currentResult) {
case "SUCCESS":
providers = []
messageSubject = "Build succeeded in Jenkins: ${currentBuild.fullDisplayName}"
messageBody = """See ${currentBuild.absoluteUrl}"""
// only send successfuly builds if the previous build was unsuccessful or incomplete
sendMail = currentBuild.previousBuild == null || !"SUCCESS".equals(currentBuild.previousBuild.result)
break
case "UNSTABLE":
providers = [[$class: 'CulpritsRecipientProvider']]
messageSubject = "Build unstable in Jenkins: ${currentBuild.fullDisplayName}"
messageBody = """See ${currentBuild.absoluteUrl}"""
sendMail = true
messageTail = '\nBuild log:\n${BUILD_LOG}'
break
case "FAILURE":
providers = [[$class: 'CulpritsRecipientProvider']]
messageSubject = "Build failed in Jenkins: ${currentBuild.fullDisplayName}"
messageBody = """See ${currentBuild.absoluteUrl}"""
sendMail = true
messageTail = '\nBuild log:\n${BUILD_LOG}'
break
case "ABORTED":
providers = [[$class: 'CulpritsRecipientProvider']]
messageSubject = "Build aborted in Jenkins: ${currentBuild.fullDisplayName}"
messageBody = """See ${currentBuild.absoluteUrl}"""
sendMail = true
messageTail = '\nBuild log:\n${BUILD_LOG}'
break
default:
echo "Unknown status: ${currentBuild.currentResult}"
// should never happen if we are actually being invoked.
return
}
// comment on any jira tickets
def jiraIssues = null
def jiraMavens = []
try {
jiraIssues = jiraIssueSelector(issueSelector: [$class: 'DefaultIssueSelector'])
for (def jiraIssue in jiraIssues) {
// only comment on maven's issues, all our trackers start with M
// may end up commenting on other TLPs in some cases but should be very rare
if (jiraIssue.startsWith("M")) {
try {
jiraComment body: "${messageSubject}\n\n${messageBody}", issueKey: jiraIssue
} catch (e) {
echo "WARNING: Could not update ${jiraIssue}: ${e.message}"
}
jiraMavens += jiraIssue
}
}
} catch (e) {
echo "WARNING: Could not determine JIRA issues: ${e.message}"
}
// set the build description to the jira ticket id's
if (!jiraMavens.empty) {
currentBuild.description = "${jiraMavens.join(', ')}"
}
// add the changes to the email
def authors = []
if (currentBuild.changeSets.isEmpty() ) {
messageBody = messageBody + "\n\nNo changes.\n";
} else {
messageBody = messageBody + "\n\nChanges:\n";
for (def changeSet in currentBuild.changeSets) {
for (def change in changeSet) {
messageBody = messageBody + "\n* ${change.msg.trim().replaceAll('\n','\n ')}"
authors += change.author.id
}
}
messageBody = messageBody + "\n"
}
println("The authors of changes ${authors.unique()}.")
for (def author in authors) {
if (author.matches('(.*)github(.*)')) sendMail = false
}
if (authors.isEmpty()) sendMail = false
if (sendMail) {
messageBody = messageBody + '\n${FAILED_TESTS}\n' + messageTail
println("Sending email ...")
emailext body: messageBody, recipientProviders: providers, replyTo: 'dev@maven.apache.org', subject: messageSubject, to: 'notifications@maven.apache.org'
}
}