以前Jenkins2のPipeline(旧Workflow Plugin)で作られたジョブをテストで何百回も回すテストに出会ったことがありました。その際ビルドを繰り返すたびに使用メモリが増えてメモリリークしJenkinsの応答がなくなるという現象に出会いました。(Pipeline自体にメモリリークの原因があったはず)このときにテストが終わるまでにJenkinsの応答が無くならないように対応した例を記載しておきます。
使用したPlugin
-
Monitoring
https://wiki.jenkins.io/display/JENKINS/Monitoring
JVMの情報等を確認するために使用しました。APIが便利です。
Jenkinsの管理画面からMonitoringの画面にアクセスし、/monitoring?format=json&part=jvm
これで現在使用中のメモリと最大メモリが取得できます。 -
Startup Trigger
https://wiki.jenkins.io/display/JENKINS/Startup+Trigger
jenkins起動時に設定したジョブを実行することができます。
回避方法
- jenkinsが起動されたら実行される再起動確認用ジョブを作成する(中身は空でも良いです)
- テストの中で定期的にMonitoringのAPIからメモリ使用率を取得する
- 閾値を超えたら現在の再起動確認用ジョブのAPIから現在のビルド番号を取得しておき、safeRestartでjenkinsの再起動を行う
- 再起動を実行したら再起動確認用ジョブのAPIから現在のビルド番号を取得して(jenkinsが停止している間があるので何回か繰り返して取得する)直前に取得しておいたビルド番号と比較して異なっていたら再起動が成功したという認識でテストを先に進める