Jenkins→Slack通知スクリプトの例

JenkinsのSlack Notificationプラグインを利用することで、PipelineスクリプトからSlackに通知を飛ばせます(他のプラグイン同様、設定画面からインストール可能)。

Jenkinsからのslack通知受信例

エラー通知は例外処理で分岐させる

slackSendの基本的な使い方は、デバッグログのように実行したい場所に置くだけですが、素朴に処理の最後でslackSendすると正常終了するケースでは通知されますが、処理途中でエラーが起きるとslackSendに到達することなくジョブが終了します。

エラーの際にも通知したい場合には、groovyのtry – catch構文を利用して、tryブロックに正常系、catchブロックのエラーハンドリングの中で、エラー通知用のslackSendを実装する手があります。

以下のように例外処理と組み合わせることで、成功/失敗の表現を分かりやすく切り分けられます。

node {
    try {
            stage 'Checkout build repo'
            checkout scm

            stage 'Stage 1'
            sh('make')
            sh('make install')

            slackSend(color: "good", message: "Build Completed = ${env.JOB_NAME} ${env.BUILD_NUMBER}")
    } catch(err) {
            slackSend(color: "danger", message: "Build Failed = ${env.JOB_NAME} ${env.BUILD_NUMBER}: ${err}")
            throw(err)
    } finally {
    }
}

SlackのコマンドはslackSendです。
colorについては、#439EF0といった16進表記の指定のほか、good / warning / danger の3種類が事前定義されています。

slackSendのその他のオプションは、 公式ドキュメントにリファレンスがあります。

なお、Slackではなく例外処理の話題になりますが、上記のようにcatch{}節に処理を記述するとエラー処理できたと見なされて正常終了するので、最後にthrow(err)で再度エラーを発生させています。

中馬崇尋
Chuma Takahiro