極光日記

Jenkinsがworkspaceのファイルを削除してしまう問題の解決方法

作成日

現象の詳細

Jenkins dashboard

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からも確認できます。

この変更以降ワークスペースが削除される問題は発生しなくなりました。