[Linux] 將 Jenkins 停機,搬移工作目錄
部門在一台 Linux 電腦上架了 Jenkins,
不過這台的磁碟空間主要留給了 /var/app_data,
但 Jenkins 預設的工作目錄 /var/lib/jenkins 算是歸在 / 下面,
空間沒有放的很大,導致常常遇到空間不足的問題,
這也連帶的是 Jenkins 任務無法被執行,且常常沒有通知….
今天決定來把工作目錄搬移到 /var/app_data 下面,
來看一下怎麼做吧~
1. 將 Jenkins 停機
到 Jenkins > 管理 Jenkins > 準備停機,
就會出現「Jenkins 即將停機」的紅色訊息:
不過等了半天,沒有半點要自動關機的跡象…
查了一下,原來這只是讓新的工作不再執行,
好讓管理者可以「準備停機」…
打開終端機,用 systemctl 將 jenkins 服務停止:
systemctl stop jenkins
這樣就算停機完成了,
理論上Jenkins 的服務不會繼續使用 /var/lib/jenkins 這個工作目錄,
我們就可以放心的移動它了~
2. 複製工作目錄到新的位置
這邊我是用 rsync 的方式,把 /var/lib/jenkins 整個複製到 /var/app_data 下面:
rsync --progress -av /var/lib/jenkins /var/app_data/
之所以不用 mv 搬移目錄的方式,是因為之前已經遇過好幾次慘痛經驗,
只要 mv 中途失敗 (無法複製、或是 SSH 中斷等等),
想要繼續用 mv 搬移剩下的目錄/檔案時,
就很容易出現「Folder already exists」之類的訊息,
變成得一個個檔案搬,非常麻煩…
用 rsync 的好處是,它就只是將目錄/檔案複製到新的位置,
即使中斷了,下次再用 rsync 也可以繼續上次的進度~
複製好後,注意一下新的 /var/app_data/jenkins 的檔案擁有者 (owner),
假設你是用 root 跑 rsync 的話,這新的目錄可能都是屬於 root 的,
但這會導致 Jenkins 服務沒有權限存取,
因此要用 chown 將整個新的 /var/app_data/jenkins 目錄改成歸 jenkins 所有:
chown -R jenkins: /var/app_data/jenkins/
3. 建立指向新工作目錄的符號連結
雖然複製了新的目錄,
但Jenkins 預設的工作目錄依然是 /var/lib/jenkins。
不想要去改設定檔的話,簡單的作法就是建立一個符號連結,
讓 /var/lib/jenkins 事實上是指到 /var/app_data/jenkins:
cd /var/lib mv jenkins jenkins_old ln -sf /var/app_data/jenkins ./
4. 啟動 Jenkins 服務
確認檔案都複製好、且符號連結也建立好後,
就可以用 systemctl 重新啟動 Jenkins 服務了:
systemctl start jenkins
快速運行幾個任務,看來都可以正常執行,
以後就不用再擔心 Jenkins 會因為磁碟空間不足而停止運作啦~
參考資料:Why does Prepare for Shutdown not seem to work? – CloudBees Support