Jenkinsでビルド失敗時に任意のスクリプトを実行する

いろいろなプラグインを試したのですが、ビルド失敗の時だけ任意の処理を実行しようとした時に、コレというのが見つけらず意外と苦戦したのでメモ。

ビルド後の処理で任意のシェルスクリプトを実行するプラグイン

プラグイン「Post build task」をインストールします。

APIを使ってビルドステータスを取得する

${BUILD_URL}api/json?tree=result と記述することで、今回のビルドの実行結果を取得するURLとなります。
このURLにリクエストを投げ結果を取得します。
結果は {“result”:”SUCCESS”} や {“result”:”FAILURE”}  と取得できます。

JenkinsにID、PW認証をかけている場合の対処

APIにリクエストを送信した場合に、そのままだとログイン画面が表示されてしまうので、認証用のパラメータをオプション指定してリクエストします。
ホーム > Jenkinsの管理 > ユーザーの管理 >ユーザーを選択 >左メニュー:設定
と進むとAPIトークンという項目がありますので、「APIトークンの表示…」を選択します。
jenkins_api_token
ここで表示されるユーザーIDとAPIトークンをパラメータとして利用します。
wget –auth-no-challenge –http-user=ユーザーID –http-password=APIトークン ${BUILD_URL}api/json?tree=result
APIトークンを使ったリクエストの公式ドキュメント

ビルド成功・失敗の結果を取得して任意のシェルスクリプトを実行する

これらを組み合わせてPost build taskのスクリプトに以下のように設定します。

STATUS=`wget --auth-no-challenge --http-user=ユーザーID --http-password=APIトークン ${BUILD_URL}api/json?tree=result -o /dev/null -O - | grep SUCCESS | wc -w`
if [ $STATUS -eq 1 ]; then
    echo "SCCESS!!"
else
    echo "FAILURE!!!"
fi

あとは、SCCESS、FAILUREの部分に実施したい任意のコードを追加してもらえればOKです。
外部のチャット系WebAPIを呼び出したり、物理機器を操作したりお好みでどうぞ!