はじめに
- あんまり理解せずに 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
サーバーにポストしてみる。
準備
新規ジョブから 外部ジョブの監視
をチェックして ジョブ名
は適当に...
ジョブの結果
まずは適当な文字列を 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
のジョブに表示される。
では、ちょいとイタズラで <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
おお、とっても簡単。
最後に
Jenkins
先生に外部ジョブの結果を面倒までも見てもらう為には定形のXML
フォーマットと決まったURL
にポストするだけでオッケーJenkins
ではエラーコードは0
は成功と判断される、また、0
以外は失敗と判断されるので注意する