JenkinsでMavenのERRORのみを記載したメールを飛ばそう

Jenkinsは非常に役立っています。
Jenkinsを使うと、自動でコンパイルを行ってくれます。




コンパイル?そんなのローカルPCのコマンドプロンプトEclipse上で行えばいいじゃん」
と思っている人がいるかもしれません。

しかし大人数で開発を行っている場合、個人の設定で左右されてしまうローカルPC上でコンパイルすることはあまり良くありません。
例えば、みんな同じVersionのJDKを使っているという保証はありますか?
ライブラリのパスをローカルPC上の絶対パスで指定していませんか?


こういうことを無くすために、現在、私の部署ではJenkins&mavenを利用してコンパイルしています。
ただ、Jenkins&mavenコンパイルすると、大量のログが出てきます。
このログをただ単にメールへ載せると、メール本文が大変なことに…!


ということで、今回はJenkinsでコンパイルエラーによるJob失敗が起こった時に、ERRORのみ記載したメールを飛ばそうというお話です。




使うのは、以下の3つ
・Jenkins
Maven
・Email-ext plugin

上2つは、Jenkins&Mavenコンパイルすると言っているのだから、もちろん必要です。

そして今回ポイントとなるのはEmail-ext pluginです。
Email-ext plugin

これを使うと、メールの内容に色々な情報を載せることが出来るほか、
Jobの成功・失敗によって送り先を変えることができます!
(例えば成功した場合はソース管理者、失敗した場合にはソースのコミット者に連絡するなど)

メール本文も色々とカスタマイズできます。
詳しくは下のサイトへ
Jenkinsから送信されるメールをカスタマイズする(Ryuzee.com)


そして、文字抽出の方法については以下のサイトに書かれています。
Jenkinsでログの一部分からメールを作成する方法(しらじ)


これらの情報を用いて、MavenERRORの部分のみメール本文に記載しようと思います。

まず、Jenkins&Mavenコンパイルしようとして失敗すると、こんなエラー文が出てきます。


この場合、赤くなっている部分がエラー部分です。
この部分の特徴として、必ず行頭が[ERROR]で始まります。
そこで、Email-ext pluginを用いて、[ERROR]だけを抜き出すようにしましょう!

やり方としては、拡張Email本文の部分に

${BUILD_LOG_REGEX,regex="^\\[ERROR\\].*",linesBefore=0, linesAfter=0, showTruncatedLines=false}


と記載するだけです。
このBUILD_LOG_REGEXregex部に正規表現を表記することで、正規表現に当てはまる行だけを抜き出せます。
なお、ここでの注意点はエスケープ記号\を2つ入れること!
他の詳しい設定はJenkinsから送信されるメールをカスタマイズする(Ryuzee.com)を見て下さい。


さて、これでメールには[ERROR]の行のみが載るようになりました!
そして、メールが来ても「どこがエラーになっているのか分からないよぉ…」と困ってしまう人を作り出すことを防ぐことができました!

めでたし、めでたし…。