Jenkins v2.19にパイプライングルーヴィーなスクリプトがあります。また、私は
「Slack Notification Plugin」v2.0.1および「Groovy Postbuild Plugin」。
「ビルドが開始されました」および「ビルドが終了しました」というメッセージを送信しました(もしあれば)。
いくつかのビルドステップが失敗したとき-Slackチャンネルに「Build failed」というメッセージを送信するにはどうすればよいですか?
このようなことをして、try catchブロックを使用できます。
コードの例を次に示します。
node {
try {
notifyBuild('STARTED')
stage('Prepare code') {
echo 'do checkout stuff'
}
stage('Testing') {
echo 'Testing'
echo 'Testing - publish coverage results'
}
stage('Staging') {
echo 'Deploy Stage'
}
stage('Deploy') {
echo 'Deploy - Backend'
echo 'Deploy - Frontend'
}
} catch (e) {
// If there was an exception thrown, the build failed
currentBuild.result = "FAILED"
throw e
} finally {
// Success or failure, always send notifications
notifyBuild(currentBuild.result)
}
}
def notifyBuild(String buildStatus = 'STARTED') {
// build status of null means successful
buildStatus = buildStatus ?: 'SUCCESSFUL'
// Default values
def colorName = 'RED'
def colorCode = '#FF0000'
def subject = "${buildStatus}: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'"
def summary = "${subject} (${env.BUILD_URL})"
// Override default values based on build status
if (buildStatus == 'STARTED') {
color = 'YELLOW'
colorCode = '#FFFF00'
} else if (buildStatus == 'SUCCESSFUL') {
color = 'GREEN'
colorCode = '#00FF00'
} else {
color = 'RED'
colorCode = '#FF0000'
}
// Send notifications
slackSend (color: colorCode, message: summary)
}
完全なスニペットはここにあります Jenkinsfile Template
Liam Newmanのブログ投稿 に基づいて、scriptedパイプライン(宣言パイプラインユーザーのみ)でSlackのクリーンアップされたスニペットをご覧ください下へスクロール)。元の Jenkinsの結果 、メッセージのフォーマット、より良い色( EclEmma に基づく)、および デフォルト引数 のようないくつかのGroovy機能を使用します。
def notifySlack(String buildStatus = 'STARTED') {
// Build status of null means success.
buildStatus = buildStatus ?: 'SUCCESS'
def color
if (buildStatus == 'STARTED') {
color = '#D4DADF'
} else if (buildStatus == 'SUCCESS') {
color = '#BDFFC3'
} else if (buildStatus == 'UNSTABLE') {
color = '#FFFE89'
} else {
color = '#FF9FA1'
}
def msg = "${buildStatus}: `${env.JOB_NAME}` #${env.BUILD_NUMBER}:\n${env.BUILD_URL}"
slackSend(color: color, message: msg)
}
node {
try {
notifySlack()
// Existing build steps.
} catch (e) {
currentBuild.result = 'FAILURE'
throw e
} finally {
notifySlack(currentBuild.result)
}
}
出力は次のようになります(異なる書式設定スタイルで遊んでください here ):
env.JOB_NAME
にはエンコードされたスラッシュ(%2F
)が含まれている可能性があり、これはreplaceAll("%2F", "/")
で修正できます。 this Gist もチェックして、HipChatに通知する方法を確認してください。
declarativeパイプラインがある場合は、 "Cleaning up and notification" またはLiam Newmanのフォローに関するJenkinsのドキュメントを参照してください。 -up post "宣言型パイプライン:通知と共有ライブラリ" 。
宣言構文の場合は、
現在、Jenkinsはpost
を提供しています。パイプラインの最後で結果を確認できます。
https://jenkins.io/doc/book/pipeline/syntax/#post-example
Likeの使用:
pipeline {
stages { ... }
post {
// only triggered when blue or green sign
success {
slackSend ...
}
// triggered when red sign
failure {
slackSend ...
}
// trigger every-works
always {
slackSend ...
}
}
}
すべてのstage
でも使用されます。ドキュメントのリンクをご覧ください。