Last active
December 5, 2018 09:40
-
-
Save jmrozanec/06e505dd5d5d81e4a9b2265c559f7ff8 to your computer and use it in GitHub Desktop.
Provides formatted messages to notify build status through Slack
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def shallWeNotify(String policy, String lastStatus, String currentStatus) { | |
switch(policy){ | |
case 'all-builds': | |
return true; | |
case 'status-change': | |
return !lastStatus.equals(currentStatus) | |
case 'unstable-builds': | |
return currentStatus.equals('UNSTABLE') || currentStatus.equals('FAILURE') | |
case 'broken-builds': | |
return currentStatus.equals('FAILURE') | |
} | |
return false | |
} | |
def getColor(String status){ | |
switch(status){ | |
case 'SUCCESS': | |
return '#BDFFC3' | |
case 'UNSTABLE': | |
return '#FFFE89' | |
case 'FAILURE': | |
return '#FF9FA1' | |
case 'ABORTED': | |
return '#C0C0C0' | |
} | |
} | |
def getRandomEmoji(String status){ | |
emojis = [:] | |
emojis['SUCCESS']= ['hugging_face', 'nerd_face', 'sunglasses', 'muscle', 'raised_hands', 'rocket', 'tada'] | |
emojis['FAILURE']= ['slightly_frowning_face', 'disappointed', 'disappointed_relieved', 'thinking_face', 'tired_face', 'face_palm'] | |
emojis['UNSTABLE']= ['face_with_raised_eyebrow','neutral_face'] | |
emojis['ABORTED']= ['hushed', 'frowning', 'astonished'] | |
selected_list = emojis[status] | |
return selected_list[new Random().nextInt(selected_list.size())] | |
} | |
def createSlackMessage(String status){ | |
String failureData = "Check <${env.BUILD_URL}/changes|build changes> and <${env.BUILD_URL}/console|console output> for more info" | |
String unstableData = "Check <${env.BUILD_URL}/changes|build changes>, <${env.BUILD_URL}/cobertura|coverage reports> and <${env.BUILD_URL}/console|console output> for more info" | |
String abortedData = "Perhaps interested on <${env.BUILD_URL}/changes|build changes>?" | |
String emoji = getRandomEmoji(status) | |
switch(status){ | |
case 'SUCCESS': | |
return "Yay! `${env.JOB_NAME}` is good again! :${emoji}:" | |
case 'UNSTABLE': | |
return "Hmmm ... `${env.JOB_NAME}` is unstable again :${emoji}: \n" + unstableData; | |
case 'FAILURE': | |
return "Ooops! `${env.JOB_NAME}` failed ... :${emoji}: \n" + failureData; | |
case 'CANCELLED': | |
return "Hey! `${env.JOB_NAME}` was cancelled! :${emoji}: \n" + abortedData; | |
} | |
} | |
def notifySlack(String buildStatus = 'STARTED') { | |
def policy = 'all-builds' //ideally defined in another place :) | |
previousBuildStatus = currentBuild.rawBuild.getPreviousBuild()?.getResult() | |
if(shallWeNotify(policy, previousBuildStatus.toString(), buildStatus)){ | |
slackSend(color: getColor(buildStatus), message: createSlackMessage(buildStatus)) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment