HipChat で CI する
チャットツールと CI ツールを連携させることでより柔軟な運用を行えます。例えば、HipChat から Jenkins のジョブを実行し、その結果を HipChat に通知させる。日々、チーム内のコミュニケーションツールの1つとして利用しているチャットツールから CI できれば、誰もが楽に状態を把握できます。また、問題があった場合のキャッチアップも早くなります。
使ったもの
- Mac
- Hubot
- HipChat
- Jenkins
※ Hubot と HipChat についてはこちら→ Hubot と HipChat で ChatOps を参照
Jenkins のジョブ実行結果を HipChat に通知
HipChat API トークンの取得
HipChat に通知させるには API トークンが必要です。API トークンは HipChat の「Group admin」→「API」から取得できます。Type は Admin と Notification 2種類あります。(Admin はチームに関するすべての API へアクセスが許可され、Notificaion はルームにメッセージ送信のみ許可されています。)Label は自由にです。
Create で API トークンが作成されます。
HipChat プラグインをインストール
Jenkins には HipChat と連携するための HipChat プラグインがあります。それをインストールし Jenkins に先程作成した API トークンを登録することで Jenkins と HipChat が連携できます。Jenkins の「プラグインの管理」からインストールします。
インストールできたら「システムの設定」で API トークンを登録します。Global HipChat Notifier Settings に API Token とルーム名と Jenkins の URL を設定すれば OK です。
ジョブに HipChat の設定を追加
HipChat プラグインが正しくインストールされていれば、ジョブの設定に HipChat Notifications という項目が追加されています。対象のルーム名を入力します。Start Notification にチェックを入れるとジョブ開始時にも通知されます。
最後に、ジョブの設定の「ビルド後の処理」でも HipChat Notifications を追加すれば、ジョブの実行結果を HipChat に通知してくれます。
これで、HipChat にジョブの実行結果を通知する設定が整いました。対象のジョブを実行すると、
ジョブの実行結果 Success という通知がくるようになります。
HipChat から Jenkins のジョブを実行
ジョブの実行結果を通知できるようになりましたが、ここでは HipChat からの命令を Hubot でスクリプト解析し Jenkins のジョブを実行させます。Hubot と HipChat は連携されている前提で、ジョブを実行するスクリプトを用意します。
Jenkins ジョブ実行用のスクリプト
module.exports = (robot) ->
robot.respond /jenkins (.*)/i, (msg) ->
config =
url: 'http://localhost:8080'
job = msg.match[1]
msg.send "ジョブ「#{job}」を実行します。"
robot.http("#{config.url}/job/#{job}/build").get() (err, res, body) ->
## 必要な処理を記述
このスクリプトは Hubot に対して {Jenkins ジョブ名} とメッセージが送られた場合に msg.match[1] でジョブ名を変数 job につめ実行させています。ジョブ実行のメッセージを送ると以下のような応答があります。実行結果も Success と通知されています。
チーム状態に関する情報をチャット上に集約できれば、今どんな動きがあってどこに問題があるのか把握しやすくなります。CI だけでなくクラッシュの情報なども確認できれば、より改善までのサイクルも早くできると思います。