LoginSignup
2
5

More than 3 years have passed since last update.

【Jenkins】ビルド失敗時のログをSlackに自動投稿する

Posted at

はじめに

スクリーンショット 2020-04-03 15.54.20.png

Jenkinsのビルドが失敗した時、ログから原因を特定して修正を行う必要があります。しかし、Jenkinsを社内のローカルサーバーで動かしている場合など、外部からアクセスできない場合がありました。そこで、今回はビルド失敗時のログを自動的にSlackに投稿する仕組みを作ったので、紹介したいと思います。

環境

  • Windows 10 Home 1903
  • Jenkins ver. 2.204.5

方法

ビルド失敗時のトリガー

今回はParameterized Trigger pluginを使いました。これはパラメータを引継ぎつつ下流ジョブを動かすことができるプラグインです。ログを出力する際に必要がパラメーター渡しつつ、また発火の条件を指定することもできる(今回はビルド失敗時)ため、要件に合致していました。

スクリーンショット 2020-04-03 15.36.09.png

参考: 開発者(個人)のためのJenkins - Parameter編

ちなみに下流ジョブでは受け取るパラメータを定義しておく必要がある点に注意です。

スクリーンショット 2020-04-03 15.41.08.png

Jenkinsのビルドログを取得してutf8に変換する

下流ジョブのビルド/シェルの実行にて記述していきます。

cd "${JENKINS_HOME}/workspace"

curl http://localhost:8080/all/job/${PROJECT_NAME}/${BUILD_NUMBER}/consoleText >${PROJECT_NAME}-${BUILD_NUMBER}.log
./convert.bat ${PROJECT_NAME}-${BUILD_NUMBER}.log

ビルドログの取得にはcurlコマンドを利用します。ビルドログはhttp://[JENKINS_URL]/job/[JOB_NAME]/[BUILD_NUMBER]/consoleTextで取得できるため、上流ジョブから引き継いだパラメータを利用して加工します。そのままだとconcoleTextという名前で保存されてしまうので、今後のためにビルド情報を使った名前をつけておきます。

また、WindowsではShift-Jis形式になっていて不都合があるため、UTF8に変換しておきます。以下のバッチファイルを利用しました。

参考: シフトJISのテキストファイルをUTF-8に変換するバッチ - 今日を乗り切るExcel研究所

(今回は出力ファイルで上書きされるように一部変更しています)

Slackにログファイルをアップロードする

Slack APIを使ってファイルをアップロードします。ファイル操作の権限が必要なため、Slack Appの作成が必要になります。少し煩雑ですが、ドキュメントを参考に進めていけば難しく無いと思います。

参考: Basic app setup | Slack
参考: files.upload method | Slack

curlコマンドを使って以下のようにアップロードできました(CHANNEL_IDと“ACCESS_TOKEN`は書き換えてください)

curl -F file=@${PROJECT_NAME}-${BUILD_NUMBER}.log -F channels=[CHANNEL_ID] -H "Authorization: Bearer xoxb-[ACCESS_TOKEN]" https://slack.com/api/files.upload
rm ${PROJECT_NAME}-${BUILD_NUMBER}.log

参考: Slack — APIに使う「チャンネルID」を取得する方法 - Qiita

最後にrmコマンドでローカルからファイルを削除して終わりです。

最後に

宣伝ですが、MyDearest株式会社では新作VRゲーム『ALTDEUS: Beyond Chronos(アルトデウス: ビヨンドクロノス)』を開発中です。リリースされたぜひ遊んでください!

また、私のTwitter(@nkjzm)のフォローや「LGTM」もよろしくお願いします!

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5