はじめに
引き続き、Could上のJenkinsにpipelineを作る際にmysql containerでつまづいたことを書いていきます。今回はmysqlすぐ落ちてしまうせいでJobも落ちる問題と、その解決方法について書いていきます。
前回の記事はこちら↓
環境
- Cloud上のJenkins
- Harbor
ざっくりテストJobの流れ
- localにあるdocker imageをHarborに上げる
- HarborのimageをJenkinsのジョブ内で呼ぶ
- Containerを起動させてテストを実行
つまづいたこと 2: MySQL containerの立ち上がりが遅いため、Jobが落ちてしまう
#log
mysqladmin: connect to server at 'mysql' failed
error: 'Can't connect to MySQL server on 'mysql' (111)'
Check that mysqld is running on mysql and that the port is XXXX.
You can check this by doing 'telnet mysql XXXX'
Pipelineを動かしてみたら、今度はMysqldが立ち上がっていないというエラーですぐjobが落ちてしまいました....
localのdocker composer up
後の流れを見ている感じ、MySQL containerの立ち上がりには他のcontainerと比べて時間差があるようでした。 私は今回初めて知ったんですが、MySQLの立ち上げが遅いのは結構あるあるみたいですね。
解決方法
MySQL Containerが立ち上がるまで1秒ごと立ち上がっているかチェックする関数を作成しました。Containerを起動後に以下の関数を呼ぶと起動状態を確認し、まだ起動していない場合はsleepに移るようになります🥳
一応Containerの起動timeoutを3分で設定しているのですが、大体5-6秒で起動されるかなと言った感じです。
def checkMysqlContainerRun() {
timeout(time: 1, unit: 'MINUTES') {
def containerRun = false
while (!containerRun) {
try {
sh "docker exec mysql mysqladmin -uroot -pPASS ping -h mysql"
containerRun = true
} catch (Exception e) {
sleep(1)
}
}
}
}
おわりに
実はMySQL containerには運用開始後も色々と悩まされております...
運用開始後のつまづきと対応も今後書ければと思います。
参考になれば幸いです🍎