実行環境
- Mac OSX Yosemite
- Jenkins 1.598
本題
Jenkins に登録しているユーザ全員のメールアドレスを取得するためのスクリプトです。
Jenkins使用者へ一斉に連絡が必要な時に使えるかもしれません。
適切なメーリングリストが無いときにでも。
apiuser="Your User Name"
token="Your access tokeen"
jenkins_url="Your jenkins url"
curl_opt="-sS -u ${apiuser}:${token}"
curl ${curl_opt} ${jenkins_url}/asynchPeople/api/json | jq -r '.users | map(select(.user.fullName != ""))[].user.absoluteUrl' | while read user_url
do
curl ${curl_opt} ${user_url}/api/json | jq -r ".property[] | select(.address != null).address" >> mails.txt
done
自アカウントのトークンは、http://${YOUR_JENKINS}/user/${YOUR_ACCOUNT}/configure
で見れます。
まあ、Admin権限があれば、誰のトークンだって見れちゃうんですけどね...。
また、jsonパーサーコマンド jq
が必要です。
select(.user.fullName != "")
は、もっとしっかり絞らないと、
Jenkinsによっては余計な人(またはサービス)のメールアドレスが含まれるかもしれません。
蛇足
コマンドで取得できるなら、送信もJenkinsで行えば自動化できますね。
EnvInject を使って取り込む
概要
-
Shellの実行
で、上記スクリプトを実行し、 - EnvInject を使ってビルド時の環境変数に取り込み、
- メール通知機能に、その環境変数を突っ込んであげる
いかなローカル下とはいえ、アカウント名やトークンをさらけ出すのは抵抗があったので、Mask Passwords Plugin を使いました。
シェルでゴリゴリし、parameterファイルを作ります。
最近のJenkinsさんは色付けしてくれるようになりました。すばらしいですね。
作ったファイルを、EnvInject Plugin で読み込みます。
あとは、メールを送信するためにわざと exit 1
で失敗させます。
メール通知設定です。
このままでは、環境変数 mails が何らかのミスで定義されなかった時に E-mail: ${mails} へメールを送信しようとしておかしなことになります。
私の環境では、ドメイン名が勝手についてさらにおかしなことになったので、mails パラメータは、パラメータ付きビルドとして、前もって定義しておいた方が良いかもしれません。
こんな感じになります。
一応、私個人のアドレスはぼかさせていただきました。
Workflow Plugin の場合
せっかくなので、Workflow Plugin でも試してみました。
apiをたたくなんてまどろっこしことはせず、Groovy でJenkinsさんからメール一覧を取得しています。
emails = []
for (int i = 0; i < User.getAll().size(); i++) {
prop = User.getAll()[i].getProperty(hudson.tasks.Mailer.UserProperty.class)
if (prop.hasExplicitlyConfiguredAddress()){
emails.push(prop.getExplicitlyConfiguredAddress())
}
}
/* Ideal
emails = User.getAll().collect {
prop = it.getProperty(hudson.tasks.Mailer.UserProperty.class)
prop.getExplicitlyConfiguredAddress()
} - null
*/
emails = emails.join(', ')
mail bcc: '', body: 'This is test mail', cc: '', charset: '', from: '', subject: 'This is test mail', to: emails
workflow plugin の時だけ、collect
が想定外の動きをしたので、しぶしぶ for文
を使っています。
ループが1要素分しか回らない
詳しい方がいたら教えて下さい...
蛇足2
素直にメーリングリスト作ったほうがはるかに便利です。