2014年4月21日月曜日

[Jenkins] Email-ext plugin の Pre-send Script を使う

Email-ext plugin の Pre-send Script を使う機会があったので、備忘録として書き残しておきます。
(Jenkins 1.556, Email-ext plugin 2.37.2.2)

Pre-send Script とは?
Pre-send Script はメール送信前にメッセージなどの編集ができる機能です。そのまんまですね。

Pre-send Script では以下のオブジェクトが扱えます。
msgMimeMessage オブジェクト
loggerログ書き込みオブジェクト
buildビルドオブジェクト
cancelboolean, 送信キャンセル

msg はメールの内容を扱う MimeMessage オブジェクトです。宛先の追加やメッセージの追加などができます。
logger はログ出力用のオブジェクトです。logger.println でビルドログに出力できます。
build はビルド情報を扱うオブジェクトです。結果や変更点などビルドに関わる情報をここから取得できます。
cancel に true をセットすると、その名の通りメールの通知がキャンセルされます。

設定方法
拡張e-mail通知の「Advanced Settings...」を開くと「Pre-send Script」の項目があるので、ここの groovy でスクリプトを書き込みます。


注意が必要なのは Pre-send の前に宛先が空だと Pre-send Script は実行されず "An attempt to send an e-mail to empty list of recipients, ignored." でメールが送信されませんので、宛先を編集する場合は気をつけてください。
Examples
上流ビルドのコミッタ-にメール通知する
上流ビルドのコミッタ-にメール通知する方法 - akira0622's blog

特定のログが含まれる場合にメール通知をキャンセル
def log = build.getLog()
pattern = /test/
if( log=~pattern )
{
  logger.println("キャンセルした")
  cancel |= true
}

ユーザーがビルドを実行した場合にメール通知をキャンセル
def cause = build.getCause(hudson.model.Cause.UserIdCause.class)
if( cause )
{
  logger.println("キャンセルした")
  cancel |= true
}

定期ビルドの場合に宛先を追加
import javax.mail.Message.RecipientType
def cause = build.getCause(hudson.triggers.TimerTrigger.TimerTriggerCause.class)
if( cause )
{
  msg.addRecipients(RecipientType.TO, "hogehoge@hoge.co.jp")
}

その他の使い方は公式の Recipe を参照してください。
https://wiki.jenkins-ci.org/display/JENKINS/Email-ext+Recipes

0 件のコメント:

コメントを投稿