[Linux] 將 Jenkins 停機,搬移工作目錄

[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

(本頁面已被瀏覽過 1,029 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料