概要
- Jenkins で外部のジョブ監視をする場合にどうやってそのエラーを捕捉するか考えて
- Jenkins の API とその結果を解析する仕組みがあればとりあえずできそうだ
Jenkins で外部のジョブを監視すること
- Jenkins の「外部ジョブの監視」を使うことで外部の cron ジョブの結果をひたすら蓄積することが出来る
- こちらが参考になる
- 上記のサイトに掲載されていたスクリプトを利用させて頂いた
- とは言え、素の状態だと蓄積された結果を以って、アクション(通知)を起こすことが出来ない
cron ジョブの結果(ステータスコード)をちゃんと Jenkins に渡す
以下のようなスクリプトを作って Jenkins に投げてみた。
結果は以下のように SUCCESS
となる。
さらに、以下のようなスクリプトを作って Jenkins に投げてみた。
結果は以下のように FAILURE
と判断してくれる。
どうやら、これを解析すれば次のアクションは起こせそう
やってみよう
こんな感じで
cron の結果を集めるジョブとそれを監視するジョブというイメージ。
ビルドの結果を解析する仕組み(1)
ビルドの結果は Jenkins の API が XML
や JSON
等の形で提供してくれるのでコヤツを利用する。例えば、上記のステータスコード 1
を投げてFAILURE
と判断させたビルドの結果を JSON
で取得する場合には URL は以下のようになる。
http://jenkins-host/job/mon-job1-check/lastBuild/api/json?pretty=true
そして、結果は以下のようになる。
これを解析させるジョブを Jenkins のフリースタイルジョブで作ってみた。
ビルドの結果を解析する仕組み(2)
やっていることはとても簡単。手順をまとめると以下のようなステップ。
- 新規ジョブ作成で
フリースタイルジョブ
を選択 - プロジェクト名は監視するジョブに
-check
等をつけると解りやすいかも
そして ビルドの手順追加
で以下のような JSON
ないしは XML
を解析出来るスクリプトを貼っつける。
上記のヘッポコは単純に JSON
を解析して result
をチェックしているだけのシンプルなもの。さらに、ビルド後の処理
をよしなに設定すれば通知機能はバッチリ。
自分なりなまとめ
出来そう
- 外部ジョブのエラーハンドリングをちゃんと行えば Jenkins 側で
SUCCESS
とFAILURE
の判断は行なってくれる(失敗した場合に必ずステータスコード 1) - あとは上記のジョブを監視する
でも
- 一つの cron ジョブに対して二つ Jenkins ジョブは冗長かもしれない