astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

Pipeline Jobから実行結果を簡単にSlackに通知する

こんにちは。宮崎からリモートしてます。開発部のyanagitaです。

新型コロナウィルスの影響の中、皆さんいかがお過ごしでしょうか。
全国的に緊急事態宣言が解除となりましたが、一足早く解除された宮崎では少しずつ緊急事態宣言前の生活に戻りつつあります。
先日、首都圏、北海道も解除宣言されてこともあり、一日も早く宣言前の生活に戻れることを願っております。

話を戻しまして、今回はすこし古いですがJenkinsのPileline JobからSlack通知について書きたいと思います。

今回確認したJenkinsとPluginのバージョン

  • Jenkins ver.2.222.3
  • Slack Notification Plugin v2.40

(問題)Pipelineプロジェクトでは、Slack Notificationsの設定項目がない

フリースタイル・プロジェクトやMavenプロジェクトでは、ビルド後の後処理に「Slack Notifications」が選択でき、ここでjobの実行結果に合わせてSlack通知の設定が可能になります。
しかし、Pipelineプロジェクトではビルド後の処理項目の表示がないので、Slack通知の設定はPipelineのScript内に記述する必要があります。

f:id:astamuse:20200527094635p:plain
フリースタイル・プロジェクトの例

ビルド後の後処理に「Slack Notifications」が選択が可能になっています。

f:id:astamuse:20200527094822p:plain
Pipelineプロジェクトの例

Pipelineプロジェクトではパイプラインの設定まででビルド後の処理が項目がないです。

Pipeline Script内にSlack通知を記述する

まず、Pipeline Scriptの記述は2つあって、pipeline記述にとnode記述が存在します。

  • Pipeline記述
pipeline {
    agent any
    stages {
        stage("code") {
            steps {
                echo "pipeline."
            }
        }
    }
}
  • Node記述
node {
    stage("code") {
        echo "node."
    }
}

両方とも同じ内容のJobになっていて、node構文のほうが記述量が少なく、プログラム形式に記述することができるので細かい制御が可能になりますが、ビルド失敗時のケアもプログラミング同様に記述する必要がでてきます。
複雑なJob実行を求められていないのであれば次で説明するpipeline記述のpost構文と組み合わせるとこで、Slack Notificationsの設定同様にビルド結果に合わせて通知内容を簡単に制御できます。

piepline記述のpost構文は、Jobの実行結果ごとに追加処理を記述することができるようになっています。

pipeline {
    agent any
    stages {
        // job処理
    }

    // ここからがpostの記述
    post {
        success { /* Job正常終了時 */ }
        failure { /* Job失敗時 */ }
    }
}

post直下のsuccess、failureがJob実行結果の条件になっており、該当する条件内の処理が実行されます。
success、failure以外はこちらをご確認ください。

post構文でビルド後の後処理と同様の設定が可能になったので、次に各実行結果の中でSlack通知を記述していきます。
Slack通知はSlack Notification Pluginに含まれるslackSendコマンドを利用します。

post {
    success {
        slackSend  color: 'good',
                           message: "build success."
        }
    }
    failure {
        slackSend  color: 'danger',
                           message: "build failure."
        }
    }
}

f:id:astamuse:20200527102717p:plain
Slack通知イメージ

slackSendは、メッセージ以外にチャンネルの指定やBot名も設定できます。(オプションはこちら)
指定しない場合は、Jenkinsの管理 > システムの設定 > Slack設定の内容がデフォルトの通知設定になります。
※ オフシャルのサイトではmessageオプションは省略可能になっていますが、私が環境ではmessageオプションを付けないとビルドエラーになってしまいJobの実行ができませんでした。
※ node記述でもslackSendは利用可能です。

以上、pipeline記述のpost構文とslackSendの組み合わせで、pipeline jobからSlack Notifications設定同様のSlack通知設定が簡単に行えるようになりました。

さいごに

アスタミューゼではたくさんのエンジニア&デザイナをまだまだまだ募集しています。 気になる方は下からご応募ください!新しい出会いをメンバー一同お待ちしてます!

Copyright © astamuse company, ltd. all rights reserved.