前提
- Hubot の設定ができていること
- Jenkins の設定ができていること
- Jenkins と Hubot は同一ホストで動いてるものとする(別ホストにするのも大して手順は変わらないはず)
準備
Jenkins プラグイン
Web 管理画面から Jenkins の Notification Plugin をインストールしておく。
Hubot の hubot-jenkins-notifier
npm install --save hubot-jenkins-notifier
で https://www.npmjs.com/package/hubot-jenkins-notifier をインストールする。
[
"hubot-jenkins-notifier"
]
設定
Hubot の設定
PORT 環境変数で 5080 ポートで HTTP の待ち受けをするようにしておく(Jenkins のデフォルトと競合するため)
Job の設定
Notification Plugin を入れると、ジョブ設定の最初の方に Notification の設定が追加される。
(最初はビルド後の処理かと思って見つからずにパニクってました)
Add Endpoint をクリックし、
- Format: JSON
- Protocol: HTTP
- Event: Job Finalized
- URL: http://localhost:5080/hubot/jenkins-notify?room=¬strat=FS
- Timeout: 30000 は長いので 10000 にしておいてみる
- Log:
01
なんか、Logに0を入れているとうまくいかないです。
room_id は例によってアダプタ依存なので適当に。notstrat は@ITの記事を参考に。
Log パラメータで Webhook に対してビルドログを送信できるっぽいのだが、Hubot の hubot-jenkins-notifier が対応していない様子。
hubot-jenkinsを入れると Hubot に命令して Jenkins のジョブ実行とかもできるみたいだけど、それは今回は見送りとしようかな・・・
追記:Let's Chat の絵文字を使って見やすくする
そのままだと「build #1 succeeded:」とか「#2 started failing:」とかしか言ってくれないのでぱっと見に分かりにくい。そこで、絵文字一覧の中から青丸と赤丸を使って一目瞭然となるように改造してみよう。
if data.build.phase in ['FINISHED', 'FINALIZED']
if data.build.status == 'FAILURE'
if data.name in @failing
build = "is still"
else
build = "started"
@robot.send envelope, ":red_circle: #{data.name} build ##{data.build.number} #{build} failing: #{fullurl}" if @shouldNotify(envelope.notstrat, data)
@failing.push data.name unless data.name in @failing
if data.build.status == 'SUCCESS'
if data.name in @failing
build = "was restored"
else
build = "succeeded"
@robot.send envelope, ":large_blue_circle: #{data.name} build ##{data.build.number} #{build}: #{fullurl}" if @shouldNotify(envelope.notstrat, data)
index = @failing.indexOf data.name
@failing.splice index, 1 if index isnt -1
必要なところに:red_circle:
と:large_blue_circle:
を足しただけ。これだけでずいぶん見やすくなる。