Jenkins是一個可擴展的開源的持續集成工具,也是當下最流行的持續集成工具。
其中插件支持使得Jenkins可定制、可擴展。
Jenkins的相關文件都存放在文件系統中,而JENKINS_HOME主要用來存放這些文件的,如系統配置文件、插件、每個job的配置文件等。
JENKINS_HOME目錄結構如下:
+- config.xml (jenkins root configuration) +- *.xml (other site-wide configuration files) +- userContent (files in this directory will be served under your http://server/userContent/) +- fingerprints (stores fingerprint records) +- plugins (stores plugins) +- jobs +- [JOBNAME] (sub directory for each job) +- config.xml (job configuration file) +- latest (symbolic link to the last successful build) +- builds +- [BUILD_ID] (for each build) +- build.xml (build result summary) +- log (log file) +- changelog.xml (change log) +- workspace (working directory for the version control system)
無論是Jenkins的升級、遷移還是備份、恢復都需要對JENKINS_HOME的操作,而備份Jenkins只需備份JENKINS_HOME即可。
在JENKINS_HOME中,有些目錄是無需備份的,如:workspace。
因為workspace是版本控制系統的工作目錄,這個目錄下的相關文件都來自版本控制系統,都可以從版本控制系統獲取。
Jenkins是可擴展的,有上千個插件可供選擇,在備份這方面有兩個插件可供選擇:thinBackup plugin和backup plugin。
thinBackup plugin可以自動備份全局的和job的指定配置文件(不包括archive和workspace)。
backup plugin可以備份JENKINS_HOME,可以選擇是否備份workspace、builds history、maven atifacts archives、fingerprints等。
thinBackup plugin和backup plugin不同:
上面兩個備份插件總體來說滿足一般的需求了。
通常持續集成服務器資源專用,Jenkins安裝在專門的服務器上(如:虛擬機)。
但是如果虛擬機掛了,短時間內難以恢復,自然也無法從備份恢復了(上面兩個插件都是本機備份)。
所以為了應對這種情況的發生,應該把JENKINS_HOME備份到其他地方。
筆者選擇將JENKINS_HOME備份到版本控制系統:
備份前的初始化步驟如下:
具體的備份步驟如下:
上述步驟,如果第2步是手動,理論上是難以實現的,所以如果是手動備份,可以不執行第5步操作
而這些流程化的步驟,如果手動操作,異常繁瑣、重復,懶人通常懶的做重復性的事,所以應該將其自動化。
關於自動化備份腳本,主要是實現上面的4個步驟:
對於第1步,使用Ant腳本實現
對於第2步、第3步和第4步,使用Python+svn client comands實現
此外,自動化備份,可以在Jenkins上創建一個job專門用來定時備份JENKINS_HOME
具體的實現腳本見:donhui/JENKINS_HOME_BAKCUP
補充說明,上述所使用到的工具及環境:
* Windows 2003 Server * Jenkins 1.592 * Python 2.7.8 * SVN Server 1.7 * svn client commands 1.7(Windows下安裝TortoiseSVN時需要手動選擇安裝) * Ant 1.8.1