Jenkinsでハマったりした
今、職場でビルドサーバを再構築しています。(これまで使っていたビルドサーバ用PCのレンタル期限が切れてしまうので、別のマシンにお引越し。レンタル期限切れって…w)
FlashやAndroidアプリもビルドできるようにして、Macのスレーブを使ってiOSアプリのビルドもできるようにもしたので、旧JenkinsサーバからJobを移植。
こういう時はJobImporterプラグイン便利だよなーと思いつつ、事件発生。
ローカル環境でも旧Jenkinsサーバでも動いていたジョブが、新サーバだけで失敗するのです。失敗しているのはDBまわりのテスト。
JUnit実践入門で書かれているDBテストの仕組みを参考にして作っていたテストが「スキーマが見つかりません」というエラーを出して失敗。
色々調べていたらローカル環境では毎回h2サーバがデフォルトの9092ポートで起動していたのに、サーバ環境では毎回起動するh2サーバのポートが違っている。
これを手がかりに調べていくと、サーバ環境では9092ポートを別のプロセスが使っていることが判明。
で、ついに原因を特定。新ビルドサーバを構築するドサクサに紛れて動かしていたgitbucketが内部でh2データベースサーバを使用していました。gitbucketを止めてみると9092ポートが未使用の状態に戻り、テストも成功するようになりました。
こういうトコでも実行環境に依存して成否が変わってしまう脆弱なテストが生まれるんだな〜と学びました。