天天看點

Jenkins 系列: (五) Jenkins 資料備份與恢複Jenkins的資料存儲結構使用插件備份使用Rsync異地備份使用版本控制工具進行備份

有好多同學教育訓練後咨詢Jenkins的資料備份問題,今天就把Jenkins的常用的資料備份方法給大家總結一下。

Jenkins的資料存儲結構

進行有效的Jenkins資料備份,首先要了解Jenkins的資料存儲結構,然後根據業務場景選擇合适的粒度進行備份。

典型的jenkins執行個體包含以下檔案和目錄:

*.xml                 需要備份
config-history        需要備份
fingerprints          需要備份
global-build-stats    需要備份
*.key*                需要備份
jobs                  jobs配置需要備份(config.xml, nextBuildNumber), builds目錄(build logs等)根據需求而定
logs                  插件logs,根據需求而定,可以不備份
monitoring            可以不備份,插件會實時生成監控資料
nodes                 需要備份
plugins               需要備份 *.jpi及 *.hpi,可以不備份每個插件子目錄,jenkins啟動後會更新插件子目錄
secrets               需要備份
updates               需要備份
userContent           使用者上傳内容,可以根據需要備份
users                 使用者緩存資訊,最好備份
           

使用插件備份

Jenkins 有好幾個插件供使用者使用,可以實作簡單的備份

https://wiki.jenkins.io/display/JENKINS/Backup+Plugin

https://wiki.jenkins.io/display/JENKINS/PeriodicBackup+Plugin

https://wiki.jenkins.io/display/JENKINS/thinBackup

這些插件的基本原理是備份特定的配置資訊,歸檔存儲到master,同時提供restore的功能。

潛在問題: 資料歸檔在master,單點問題依然存在。如果master當機了,備份資料無法獲得,也就失去了意義了。

使用Rsync異地備份

為了避免master單點故障,可以将資料備份到遠端備份機器。可以使用rsync工具同步Jenkins home到遠端,可以利用rsync工具的 “--exclude-from=FILE”功能,定制一個exclude檔案,過濾掉無需備份的資料。

潛在問題: 這種方法解決了單點備份的問題,但是需要權衡全量備份和增量備份的問題。如果每次同步到遠端一個新的目錄,每次同步将是一個全量備份,資料同步量大,速度慢;如果每次同步到相同的遠端目錄,将是增量備份,資料同步量少,速度快。每次全量備份,在犧牲網路帶寬和遠端存儲等資源下,備份會有多個版本;而每次增量備份,遠端備份和最新資料同步後,隻保留最新版本。

全量還是增量,多版本還是最新版本等,使用者需要去權衡。

使用版本控制工具進行備份

如果把Jenkins home看成代碼的話,我們可以使用版本控制的方法備份到代碼倉庫。一般情況下,公司的代碼倉庫安全性比較高。

這種方法基于版本控制倉庫的備份方法,通過版本控制工具将備份伺服器需要的配置增量備份到版本倉庫中。

把Jenkins配置備份到版本控制倉庫,有兩大好處:

1. 增量備份,避免了歸檔備份等備援備份對CPU,Disk等的浪費

2. 理論上可以恢複到所有曆史版本,取決于備份周期

比如使用Gitlab作為備份倉庫,基本步驟:

1. 建立gitlab repo用作Jenkins home 備份遠端repo

2. 設定gitlab repo權限,確定Jenkins account可以 push code等

3. 将Jenkins home 初始化為本地repo

4. 添加 .gitignore 檔案

5. 将Jenkins home 本地倉庫内容push到遠端repo中,建立master分支

6. 建立Jenkins job或者Crontab 實作定時周期性備份

Jenkins 系列: (五) Jenkins 資料備份與恢複Jenkins的資料存儲結構使用插件備份使用Rsync異地備份使用版本控制工具進行備份

潛在問題: 不要手動在Jenkins home下使用 類似 git pull 等指令,謹記Jenkins home下資料是第一最新資料,代碼倉庫隻是備份資料。每次備份,代碼倉庫會生成一個新的commit版本,周期取決于備份job或者cron的設定周期。

繼續閱讀