Jenkinsがworkspaceのファイルを削除してしまう問題の解決方法
作成日
目次
現象の詳細
Jenkinsでジョブを作成するとサーバーにそのジョブ用のディレクトリが作成されます。
このディレクトリをワークスペースと呼ぶらしく、Jenkinsの画面上からもディレクトリのファイルを確認したり、特定のファイルをダウンロードしたりできます。
なぜかワークスペース内のファイルがいつの間にか消えてしまう現象が発生し、困りました。ワークスペースをクリーンする設定もありますが、そのような設定はしておらず、ジョブの実行ごとに毎回削除されるわけでもなく、原因がわかりませんでした。
Jenkinsのバージョンは2.440.1
で、Debian 11上にホスティングされています。サーバーのストレージは100GB以上余裕があります。
ログからの現象の確認
調べるとワークスペースの削除はログに残っているようでした。私の場合はこのログは/var/lib/jenkins/logs/tasks/
にWorkspace clean-up.log
という名前で存在していました。
これを確認すると、
Started at Wed Jun 26 19:23:15 JST 2024
(略)
Checking {workspace名}
Checking {別のworkspace名}
Deleting /var/lib/jenkins/workspace/{別のworkspace名} on Jenkins
Checking {さらに別のworkspace名}
Checking {さらに別のworkspace名}
(略)
Finished at Wed Jun 26 19:23:16 JST 2024. 131ms
のようにworkspaceが削除されたらしい記録が残っていました。
実際、削除後初回の「コンソール出力」には、
Cloning the remote Git repository
Cloning repository git@gitlab.com:***.git
のようにリポジトリのクローンからやり直しているらしいログが残っていました。
対処方法
検索すると、
などが見つかりました。/etc/default/jenkins
を修正している回答がありますが、最近の Jenkins はこのファイルを参照しなくなったらしいです(参考:Jenkins changes in /etc/default/jenkins not working)
そこで、代わりにsudo EDITOR=vim systemctl edit jenkins
でJenkinsサービスの設定を変更します。
[Service]
のJAVA_OPTS
を変更し、Environment="JAVA_OPTS=-Djava.awt.headless=true -Dhudson.model.WorkspaceCleanupThread.disabled=true"
としました。(-Djava.awt.headless=true
は最初からあったので、そのままにしています)
設定変更後は
sudo systemctl daemon-reload
sudo systemctl restart jenkins
を実行しました。
なお、JVM のオプションはJenkins画面の/manage/systemInfo
からも確認できます。
この変更以降ワークスペースが削除される問題は発生しなくなりました。