ようへいの日々精進XP

よかろうもん

Jenkins で外部ホストの cron ジョブを監視する際のメモ

はじめに

  • あんまり理解せずに cron ジョブを Jenkins に投げて監視していたけどそのポイントをメモ
  • 結局、ドキュメントに書かれていることの焼きまわしになってしまうけど...

参考

こちらの記事で初めて Jenkins で外部ジョブの監視をするということを知りました。有難う御座いました!


ポイント

動作確認の環境

動作確認にあたっては docker コンテナに Jenkins をインストールして確認を行った。以下は Dockerfile と起動手順。

docker build -t ${your_container_name} .
docker run -t -d -p 8080 ${your_container_name} /usr/bin/java -jar /usr/share/jenkins/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=-1

フォーマット

下記のようなXML フォーマットで Jenkins サーバーにポストすることで外部ホストのジョブの結果を記録することが出来る。(以下、ドキュメントからの抜粋)

<run>
  <log encoding='hexBinary'>コンソール出力結果を 16 進数のバイナリエンコードしたもの</log>
  <result>エラーコード(整数)0は成功でそれ以外は失敗とする</result>
  <duration>実行時間(ms) </duration>
  <displayName>ビルドナンバーの代わりとして表示させたい名前</displayName>
  <description>ビルドの詳細</description>
</run>

ポスト先の URL

上記のフォーマットを以下の URL にポストすることでジョブの結果を記録することが出来る。

http://${Jenkins_Host}/job/${Job_Name}/postBuildResult

試しに...

フォーマットに従ったジョブの結果もどきを Jenkins サーバーにポストしてみる。

準備

f:id:inokara:20131225235546p:plain

新規ジョブから 外部ジョブの監視 をチェックして ジョブ名 は適当に...

ジョブの結果

まずは適当な文字列を 16 進数のバイナリエンコードを施す。

echo "abc" | hexdump  -v -e '1/1 "%02x"'

そうすると 6162630a というエンコード結果が出力されるので、その結果を先ほど作ったジョブにポストしてみる。

curl -X POST -d '<run><log encoding="hexBinary">6162630a</log><result>0</result><duration>100</duration></run>' http://172.17.0.20:8080/job/hogehuga/postBuildResult

そうすると以下のようにジョブの結果が Jenkins のジョブに表示される。

f:id:inokara:20131226002445p:plain

では、ちょいとイタズラで <result>1</result> としてポストしてみると...

curl -X POST -d '<run><log encoding="hexBinary">6162630a</log><result>1</result><duration>100</duration></run>' http://172.17.0.20:8080/job/hogehuga/postBuildResult

f:id:inokara:20131226002505p:plain

おお、とっても簡単。


最後に

  • Jenkins 先生に外部ジョブの結果を面倒までも見てもらう為には定形の XML フォーマットと決まった URL にポストするだけでオッケー
  • Jenkins ではエラーコードは 0 は成功と判断される、また、0 以外は失敗と判断されるので注意する