Jenkinsでジョブの変更履歴をChatWorkに通知する
http://jenkins/job/[YOUR_JOB_NAME]/[YOUR_BUILD_NUMBER]/api/xml で見れる変更履歴をChatWork API(※要申請)を使って、ビルドが終わったタイミングで任意のルームにメッセージとして流す。
1. 事前準備
- ChatWork API Token を取得しておく
- Parameterized Trigger Plugin をインストールしておく
※ChatWork APIは 2014-03-11 現在、プレビュー版のようなので、あらかじめAPI使用の申請が必要
2. 既存のジョブにビルド後の処理を追加
既存のジョブの [設定] から [ビルド後の処理] に [Trigger parameterized build on other projects] を追加
-
[Projects to build] NOTIFY_CHATWORK
-
[Trigger when build is] Stable
-
[Predefined parameters]
_JOB_NAME=$JOB_NAME _BUILD_NUMBER=$BUILD_NUMBER
3. ChatWorkへ通知するジョブを登録
新規でChatWorkへ通知するジョブ(NOTIFY_CHATWORK)を登録する
- [ビルドのパラメータ化]
_JOB_NAME(文字列),_BUILD_NUMBER(文字列) - [ビルド] シェルの実行
e.g. NOTIFY_CHATWORK
curlでjenkins api(http://jenkins/job/[YOUR_JOB_NAME]/[YOUR_BUILD_NUMBER]/api/xml)を叩いて、変更履歴を取得- その際
sedでテキスト整形 - 最後にChatWork APIを叩いて、任意のルームに通知
HEADER="[info][title]$_JOB_NAME #$_BUILD_NUMBER[/title]"
BODY=$(curl "http://jenkins/job/$_JOB_NAME/$_BUILD_NUMBER/api/xml?wrapper=changes&xpath=//changeSet//comment/text()" | sed -e 's/<changes>//' -e 's/<\/changes>//' -e 's/<changes\/>/no changes/')
FOOTER="[/info]"
curl -X POST -H "X-ChatWorkToken:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" -d "body=${HEADER}${BODY}${FOOTER}" "https://api.chatwork.com/v1/rooms/xxxxxxxx/messages"