Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
18
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@kounoike

Hubot に Jenkins のビルド通知を流す

前提

  • Hubot の設定ができていること
  • Jenkins の設定ができていること
  • Jenkins と Hubot は同一ホストで動いてるものとする(別ホストにするのも大して手順は変わらないはず)

準備

Jenkins プラグイン

Web 管理画面から Jenkins の Notification Plugin をインストールしておく。

Hubot の hubot-jenkins-notifier

npm install --save hubot-jenkins-notifierhttps://www.npmjs.com/package/hubot-jenkins-notifier をインストールする。

external-scripts.json
[
  "hubot-jenkins-notifier"
]

設定

Hubot の設定

PORT 環境変数で 5080 ポートで HTTP の待ち受けをするようにしておく(Jenkins のデフォルトと競合するため)

Job の設定

Notification Plugin を入れると、ジョブ設定の最初の方に Notification の設定が追加される。
(最初はビルド後の処理かと思って見つからずにパニクってました)

Add Endpoint をクリックし、

なんか、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:」とかしか言ってくれないのでぱっと見に分かりにくい。そこで、絵文字一覧の中から青丸と赤丸を使って一目瞭然となるように改造してみよう。

node_modules/hubot-jenkins-notifier/src/scripts/hubot-jenkins-notifier.coffee
    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:を足しただけ。これだけでずいぶん見やすくなる。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
18
Help us understand the problem. What are the problem?