上流ビルドのコミッタ-にメール通知する方法

Jenkinsを仕事で試してから早1年。

備忘録として個人的に困ったことの対処法などを残しておこう。

通常の使い方ではないのだろうけど、.Netframework1.1のプログラムを.Netframework4にコンバートしなければいけなくなった。

コンバート用のバッチは作成できたけれど、それを毎回、手動で実行するのは効率が悪かったので、Jenkinsに実行して貰うようにした。

だいたい流れは次の通り

  1. .Netframework1.1のVSS からソースを取得して、コンバート用バッチを実行
  2. コンバート結果を.Netframework4でビルド
  3. コンバート結果を.Netframework4のVSSにチェックイン

やりたいことは以上でも問題なかったけど、2番目のジョブでビルドが失敗したとき、コミットした人にメールを送りたかったのだが、ビルド履歴は1番目のジョブに紐づいているので、失敗メールを送れなかった。

対応策

ジョブの通知は Email-ext plugin を使用しているが、このプラグインにはスクリプトを設定できる機能がある。*1

そこに以下のようなスクリプトを書くことで上流ビルドのコミッターを取得してメール送信するようにしてみた。

import javax.mail.Message.RecipientType
import hudson.tasks.Mailer

def job = build.project
def dep = hudson.model.Hudson.instance.dependencyGraph
def upjobs = dep.getUpstream(job)
def list = []

def changeset= build.getUpstreamRelationshipBuild(upjobs[0]). getChangeSet()

changeset.each{
   address = it.getAuthor().getProperty(Mailer.UserProperty.class).getAddress()

   if(!list.contains(address)){
      println address
      list.add(address)
   }
}

list.each{ msg.addRecipients(RecipientType.CC, it ) }

*1:高度な機能に Pre-send Script という設定項目がある