歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

每日自動備份jenkins

Jenkins是一個可擴展的開源的持續集成工具,也是當下最流行的持續集成工具。

Jenkins主要功能

  • 易於安裝(Easy installation)
  • 易於配置(Easy configuration)
  • 變更集支持(Change set support)
  • 永久鏈接(Permanent links)
  • RSS/Email/IM集成(RSS/E-mail/IM Integration)
  • 事後標簽(After-the-fact tagging)
  • JUnit/TestNG測試報告(JUnit/TestNG test reporting)
  • 分布式構建(Distributed builds)
  • 文件指紋打印(File fingerprinting)
  • 插件支持(Plugin Support)

其中插件支持使得Jenkins可定制、可擴展。

JENKINS_HOME目錄結構

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備份插件

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不同:

  1. bakup plugin只能手動觸發備份,thinBackup plugin可以定期自動備份。
  2. bakup plugin可以備份JENKINS_HOME,可以選擇哪些內容是否需要備份(如workspace、builds history等), thinBackup plugin只備份最重要的信息(全局的和job的指定配置文件)。

上面兩個備份插件總體來說滿足一般的需求了。

通常持續集成服務器資源專用,Jenkins安裝在專門的服務器上(如:虛擬機)。
但是如果虛擬機掛了,短時間內難以恢復,自然也無法從備份恢復了(上面兩個插件都是本機備份)。

所以為了應對這種情況的發生,應該把JENKINS_HOME備份到其他地方。

將JENKINS_HOME備份到版本控制系統

筆者選擇將JENKINS_HOME備份到版本控制系統:

  1. 版本控制系統選擇的是SVN
  2. 每晚自動備份JENKINS_HOME至SVN
  3. 此外,通過SVN和可以對比兩個revision之間的差異,查看變更,便於追溯

備份前的初始化步驟如下:

  1. 在SVN版本庫上新建一個目錄如JENKINS_HOME_BAK
  2. 將JENKINS_HOME_BAK檢出(checkout)到Jenkins服務器上的某個位置,如E:/JENKINS_HOME_BAK

具體的備份步驟如下:

  1. 拷貝JENKINS_HOME到JENKINS_HOME_BAK
  2. 將JENKINS_HOME_BAK中未納入版本控制的文件或目錄納入到版本控制(svn add操作)
  3. 遍歷JENKINS_HOME_BAK,如果其中的文件或目錄不在JENKINS_HOME中,對其執行svn delete操作
  4. 最後提交到SVN版本庫(svn ci操作)

上述步驟,如果第2步是手動,理論上是難以實現的,所以如果是手動備份,可以不執行第5步操作
而這些流程化的步驟,如果手動操作,異常繁瑣、重復,懶人通常懶的做重復性的事,所以應該將其自動化。

關於自動化備份腳本,主要是實現上面的4個步驟:

  1. 對於第1步,使用Ant腳本實現

    • Ant腳本不僅僅用於構建,還可以用於構建之外
    • Ant的語法很靈活,有很多task可供選擇
    • 拷貝操作使用了Ant copy task,可以使用fileset的excludes來排除無需拷貝的文件或目錄(如workspace),很方便
    • Ant copy task可以增量copy
  2. 對於第2步、第3步和第4步,使用Python+svn client comands實現

    • 選擇Python是因為最近在不斷學習Python
    • 選擇svn client commands而不是pysvn是因為沒有在windows上安裝好pysvn,於是用svn client commands代替

此外,自動化備份,可以在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
Copyright © Linux教程網 All Rights Reserved