前幾天由於某些原因,新搞了一個jenkins例項,需要和老的機器具備相同的能力。
也就是說需要將老的jenkins例項上的大概200多個job同步到新的jenkins例項上。
下面是整個遷移的過程,如果你有更好的遷移方案,歡迎你在評論區或者後臺交流分享,共同提高。
0. 方案確定
200多個job一方面是太多了,一個個重新建太費時,另一方面也擔心建錯。
所以就就想看下有沒有整體遷移的方案可以來實施,網上查了一下大概有兩種方式。
這裡採用的是第二種方案即同步jobs目錄
# tree jenkins -L 1
jenkins
省略n多
|-- jobs
|-- logs
|-- nodes
|-- plugins
省略n多
`-- workspace
也就是同步老jenkins例項jenkins主目錄下的jobs到新的jenkins例項的jenkins主目錄下。
不知道的jenkins主目錄的可以到
系統管理-》系統設定-》主目錄
裡檢視,或者通過瀏覽器訪問http://ip:port/configure
裡檢視。
基本上就是先壓縮老jenkins例項jenkins主目錄下的jobs
目錄,然後再複製壓縮之後的檔案到新jenkins例項的jenkins主目錄下、解壓,然後重啟服務。
1. 壓縮jobs目錄
1.1 初次壓縮
# tar -czvf jobs-bak.tar.gz jobs
但是執行完這個命令之後遲遲沒有結束,感覺不太對勁。第一反應是不是檔案太多或者太大。所以趕緊取消了命令的執行,使用了下面的命令來看下目錄的大小。
# du sh
經過了比較長的等待後結果回來了,發現整個目錄近47G大,然後就想看下具體是哪些job的目錄會比較大。
# du -m --max-depth=1 | sort -nr
再次經過了比較長的等待後結果出來了。
48472 .
35347 ./a
6968 ./b
971 ./c
省略n多目錄
1.2 移除過多的歷史構建記錄之後再次壓縮
然後就是清理這些多餘的檔案,為了清理這些過多的檔案還差點整出了一個生產事故,具體參考我的上一篇博文Jenkins開啟丟棄舊的構建?你可要小心啊!
在最終清理完這些檔案之後再次壓縮,這個時候壓縮後得到的檔案小多了。
# tar -czvf jobs-bak.tar.gz jobs
# du -sh jobs-bak.tar.gz
123M jobs-bak.tar.gz
2. 遠端拷貝
# scp -f obs-bak.tar.gz root@JenkinsBip:/data/jenkins/
3. 登陸目標機器解壓
# tar -zxvf jobs-bak.tar.gz -C jobs
4. 載入jobs
解壓之後拷貝的job並不會立即生效,需要通過jenkins的 系統管理=》讀取設定
相關的功能來載入拷貝過來的job。
另外也可以通過重啟服務來讓這些job生效。
# systemctl restart jenkins
5. 經驗教訓
總結一下本次得到的教訓
我們在進行job遷移之前需要先移除過多的歷史構建記錄,只保留少量的歷史構建記錄,來保證在源機器和目標機器之間傳遞的資料儘量小,以減少資料壓縮傳輸耗時,提高遷移效率。
另外就是確保job依賴的外掛都要在新的機器上安裝,否則遷移過來的job執行時會有問題。