ようへいの日々精進XP

よかろうもん

Jenkins の外部ジョブ監視の結果を監視してみる

概要

  • Jenkins で外部のジョブ監視をする場合にどうやってそのエラーを捕捉するか考えて
  • Jenkins の API とその結果を解析する仕組みがあればとりあえずできそうだ

Jenkins で外部のジョブを監視すること

  • Jenkins の「外部ジョブの監視」を使うことで外部の cron ジョブの結果をひたすら蓄積することが出来る
  • こちらが参考になる
  • 上記のサイトに掲載されていたスクリプトを利用させて頂いた
  • とは言え、素の状態だと蓄積された結果を以って、アクション(通知)を起こすことが出来ない

cron ジョブの結果(ステータスコード)をちゃんと Jenkins に渡す

以下のようなスクリプトを作って Jenkins に投げてみた。

結果は以下のように SUCCESS となる。

f:id:inokara:20130731062634p:plain

さらに、以下のようなスクリプトを作って Jenkins に投げてみた。

結果は以下のように FAILURE と判断してくれる。

f:id:inokara:20130731062646p:plain

どうやら、これを解析すれば次のアクションは起こせそう


やってみよう

こんな感じで

f:id:inokara:20130731065612p:plain

cron の結果を集めるジョブとそれを監視するジョブというイメージ。

ビルドの結果を解析する仕組み(1)

ビルドの結果は Jenkins の APIXMLJSON 等の形で提供してくれるのでコヤツを利用する。例えば、上記のステータスコード 1を投げてFAILUREと判断させたビルドの結果を JSON で取得する場合には URL は以下のようになる。

http://jenkins-host/job/mon-job1-check/lastBuild/api/json?pretty=true

そして、結果は以下のようになる。

これを解析させるジョブを Jenkins のフリースタイルジョブで作ってみた。

ビルドの結果を解析する仕組み(2)

やっていることはとても簡単。手順をまとめると以下のようなステップ。

  • 新規ジョブ作成でフリースタイルジョブを選択
  • プロジェクト名は監視するジョブに -check 等をつけると解りやすいかも

そして ビルドの手順追加 で以下のような JSON ないしは XML を解析出来るスクリプトを貼っつける。

上記のヘッポコは単純に JSON を解析して resultをチェックしているだけのシンプルなもの。さらに、ビルド後の処理をよしなに設定すれば通知機能はバッチリ。


自分なりなまとめ

出来そう

  • 外部ジョブのエラーハンドリングをちゃんと行えば Jenkins 側で SUCCESSFAILURE の判断は行なってくれる(失敗した場合に必ずステータスコード 1
  • あとは上記のジョブを監視する

でも

  • 一つの cron ジョブに対して二つ Jenkins ジョブは冗長かもしれない