Jenkinsによるメール通知の自動化

デプロイ後にメールで通知しなければならない場合がある。Jenkinsで自動デリバリを実施しているのであれば、この作業もJenkinsに取り込みたいと思うはずだ。しかし、Jenkinsに標準で備わっているメール通知だけでは通知する内容が不足してしまうことが多々ある。

ではどうすれば良いか?

Jenkinsが送信するメールをカスタマイズすれば良い。カスタマイズするにはEmail-extプラグインを使う。

Email-extプラグインとは?

Jenkinsが送信するメールをカスタマイズするプラグインで宛先やReply-To、形式(textやhtml)、件名、本文、いつ送信(ビルド前、ビルド後他)などをカスタマイズできる。

特に、ビルドの失敗やテストの失敗、ビルドの正常への復帰などの状況に応じて送信するメールを個別にカスタマイズできるのが特徴で、2015年3月現在のバージョンは2.39。

インストール

[Jenkinsの管理]→[プラグインの管理]→[利用可能タブ]を選択して、Email-ext pluginを選択してインストール。

設定方法

共通設定と、各Job固有設定に分けて行える。各Job固有設定で上書き可能なので、全Jobの管理者ではない場合は各Job固有設定のみ変更するようにする。

以下、各Job固有設定

  • Disable Extended Email Publisher:ここをチェックすると、標準の設定を上書きする
  • Project Recipient List:送信対象者リスト
  • Project Reply-To List:Reply-Toリスト
  • コンテンツ形式:text/plain形式なのか、text/html形式なのか
  • デフォルトサブジェクト:メールのデフォルトの件名
  • デフォルトコンテンツ:メールのデフォルトの本文、利用可能なトークン(置換用の文字列)は大量にあるので後述
  • Attachments:添付ファイル
  • Attach Build Log:ビルドログを添付するのかどうか
  • トークンリファレンス:利用可能なトークンの一覧
  • Pre-send Script:送信前に実行するスクリプト
  • Additional groovy classpath:groovyへのクラスパス(利用する場合のみ)
  • Save to Workspace:ここをチェックすると、ワークスペースを保存する
  • Triggers:いつ送信するのかの定義。Always、Before Buildなど多数

利用可能なトークン

Project Tokens

${DEFAULT_SUBJECT}:デフォルトの件名
${DEFAULT_CONTENT}:デフォルトの本文
${DEFAULT_PRESEND_SCRIPT}:デフォルトのPre-send Script
${PROJECT_DEFAULT_SUBJECT}:プロジェクトのデフォルトの件名
${PROJECT_DEFAULT_CONTENT}:プロジェクトのデフォルトの本文
${BUILD_ID}:ビルドID
${BUILD_NUMBER}:ビルド番号
${PROJECT_URL}:プロジェクトのURL
${BUILD_URL}:ビルドのURL
${JENKINS_URL}:JenkinsのURL
${PROJECT_NAME}:プロジェクト名
${PROJECT_DISPLAY_NAME}:プロジェクトの表示名
${JOB_DESCRIPTION}:ジョブの説明
${CHANGES_SINCE_LAST_UNSTABLE}:最後にビルドが不安定になった以降の変更点
${BUILD_STATUS}:ビルド状態(成功、失敗他)
${SVN_REVISION}:Subversionのリビジョン番号
${SCRIPT}:groovy scriptを使ってのカスタムメッセージを挿入できる
${CHANGES}:前回のビルドからの変更点
${BUILD_LOG_REGEX}:ビルドログを正規表現で抽出できる
${BUILD_LOG_EXCERPT}:ビルドログからの抜粋
${BUILD_LOG}:ビルドログ
${JELLY_SCRIPT,template="TEMPLATE_NAME"}:Jellyスクリプトをメールのテンプレートとして読み込んでそれを挿入できる
${TEST_COUNTS,var="TYPE"}:テストの数、TYPEの部分はtotalやfailなど
${BUILD_LOG_MULTILINE_REGEX}:ビルドログを正規表現で抽出できる
${CAUSE}:ビルドが失敗した原因
${FAILED_TESTS}:失敗したテスト
${FILE,path="PATH"}:添付ファイル、PATHにはワークスペースからのパスを記載する
${CHANGES_SINCE_LAST_SUCCESS}:最後にビルドが成功した以降に更新されたファイル
${ANALYSIS_FIXED}:フィックスされた警告の数
${ANALYSIS_NEW}:新規追加の警告の数
${ANALYSIS_COUNT}:ビルドで出た警告の数
${ANALYSIS_RESULT}:プラグインによる分析結果
${CHECKSTYLE_RESULT}:Checkstyleの分析結果
${CHECKSTYLE_COUNT}:Checkstyleでの警告の数
${CHECKSTYLE_FIXED}:Checkstyleでフィックスされた警告の数
${CHECKSTYLE_NEW}:Checkstyleで新規追加の警告の数
${GIT_BRANCH}:Gitのブランチ名
${GIT_REVISION}:Gitのリビジョン番号
${WARNINGS_FIXED}:フィックスされた警告の数
${WARNINGS_NEW}:新規追加の警告の数
${WARNINGS_COUNT}:警告数
${WARNINGS_RESULT}:プラグインによる結果
${BUILD_NUMBER}:ビルド番号
${ENV,var="VARIABLENAME"}:環境変数。VARIABLENAMEに環境変数名を記載する
${PROPFILE,file="FILENAME",property="PROPERTYNAME"}:プロパティファイル、FILENAMEにはワークスペースからのパスを記載する

実際に設定して送信されたメールは以下。

各位

お疲れ様です。
12:00頃にhogehogeのhugahugaをリリースしました。

# Change log
#1: サンプルチケット

よろしくお願いします。