之前在建立 Jenkins 的時候沒有想那麼多,隨便找一台 server 來裝,反正就是先能夠自動化再說。筆者在之前有介紹過 Jenkins 自動刪除歷史建置資料,有稍稍減緩,但專案越來越多,容量也越來越不夠使用,於是下定決心要幫 Jenkins 搬家。
本文要示範的新、舊兩個 Jenkins 是放在不同的 Linux 主機,不過都是放在 Docker 內部,透過搬移 jenkins_home 的方式完成資料的移轉。建議兩個 Jenkins 的版本相同,或是新的 Jenkins 版本較高比較不容易出現問題。
首先先將舊 Jenkins 容器裡面, /var/jenkins_home 資料夾打包為 tar 格式(加快傳輸速度),因為容器內沒有 tar 指令,所以我們在主機傳達指令進 docker 執行打包,完成後放置到根目錄下,且一般使用者權限不足,所以使用 root 身份進入容器。
註:本文示範的 Jenkins 容器名稱都叫做 Jenkins
使用 scp 指令將 jenkins_home.tar 檔案複製到放置新 Jenkins 的 Linux 主機
註1:目標主機需要開啟 ssh 連線,延伸閱讀:設定 Linux 開放 ssh 連線
註2:需要等待所有檔案傳輸完畢,筆者的檔案大小為 4.6GB,花費時間約 7 分鐘
註3:-P 1234 代表使用指定的 ssh port,若為標準 port,可以省略。
執行輸出內容:
這個時候到新的主機下面查看,就會看到該檔案
jenkins_home.tar 將檔案複製到 Jenkins 容器內的 var 目錄下
建議先進入容器內將新的 jenkins_home 資料夾備份,避免發生意外(雖然是新的沒有資料)
在 Linux 下(非容器內)使用 root 帳號將容器內的 jenkins_home.tar 檔案解開
Jenkins 的資料遷移到這裡就完成了!
不過如果新的 Jenkins ip 和舊的不一樣,會提示 「Reverse Proxy 設定好像有點問題喔」
可以在資訊主頁 > 管理 Jenkins > 設定系統 > Jenkins 位置 > Jenkins URL 調整設定
延伸閱讀:[教學] docker 中的 Jenkins 更新
本文要示範的新、舊兩個 Jenkins 是放在不同的 Linux 主機,不過都是放在 Docker 內部,透過搬移 jenkins_home 的方式完成資料的移轉。建議兩個 Jenkins 的版本相同,或是新的 Jenkins 版本較高比較不容易出現問題。
首先先將舊 Jenkins 容器裡面, /var/jenkins_home 資料夾打包為 tar 格式(加快傳輸速度),因為容器內沒有 tar 指令,所以我們在主機傳達指令進 docker 執行打包,完成後放置到根目錄下,且一般使用者權限不足,所以使用 root 身份進入容器。
註:本文示範的 Jenkins 容器名稱都叫做 Jenkins
docker exec -u root -it jenkins tar cvf /jenkins_home.tar /var/jenkins_home
使用 scp 指令將 jenkins_home.tar 檔案複製到放置新 Jenkins 的 Linux 主機
註1:目標主機需要開啟 ssh 連線,延伸閱讀:設定 Linux 開放 ssh 連線
註2:需要等待所有檔案傳輸完畢,筆者的檔案大小為 4.6GB,花費時間約 7 分鐘
註3:-P 1234 代表使用指定的 ssh port,若為標準 port,可以省略。
docker exec -u root -it jenkins scp -p -C -P 1234 /jenkins_home.tar dev@192.168.0.3:~
執行輸出內容:
$ docker exec -u root -it jenkins scp -p -C -P 1234 /jenkins_home.tar dev@192.168.0.3:~
The authenticity of host '[192.168.0.3]:1234 ([192.168.0.3]:1234)' can't be established.
ECDSA key fingerprint is SHA256:2sxsw9Oqzj/RuywqaAaGGaAafvRuyutRpf123WsOqpk.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[192.168.0.3]:1234' (ECDSA) to the list of known hosts.
dev@192.168.0.3's password:
jenkins_home.tar 100% 4640MB 11.0MB/s 07:01
這個時候到新的主機下面查看,就會看到該檔案
dev@ci-cd:~$ ls
jenkins_home.tar
jenkins_home.tar 將檔案複製到 Jenkins 容器內的 var 目錄下
docker cp jenkins_home.tar jenkins:/var
建議先進入容器內將新的 jenkins_home 資料夾備份,避免發生意外(雖然是新的沒有資料)
在 Linux 下(非容器內)使用 root 帳號將容器內的 jenkins_home.tar 檔案解開
docker exec -u root -it jenkins tar xvf /var/jenkins_home.tar
Jenkins 的資料遷移到這裡就完成了!
不過如果新的 Jenkins ip 和舊的不一樣,會提示 「Reverse Proxy 設定好像有點問題喔」
可以在資訊主頁 > 管理 Jenkins > 設定系統 > Jenkins 位置 > Jenkins URL 調整設定
延伸閱讀:[教學] docker 中的 Jenkins 更新
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com