1. 程式人生 > >持續整合工具集之一 Jenkins簡介

持續整合工具集之一 Jenkins簡介

Jenkins 是一個可擴充套件的持續整合引擎。

主要用於:

  • 持續、自動地構建/測試軟體專案。
  • 監控一些定時執行的任務。

Jenkins擁有的特性包括:

  • 易於安裝-只要把jenkins.war部署到servlet容器,不需要資料庫支援。
  • 易於配置-所有配置都是通過其提供的web介面實現。
  • 整合RSS/E-mail通過RSS釋出構建結果或當構建完成時通過e-mail通知。
  • 生成JUnit/TestNG測試報告。
  • 分散式構建支援Jenkins能夠讓多臺計算機一起構建/測試。
  • 檔案識別:Jenkins能夠跟蹤哪次構建生成哪些jar,哪次構建使用哪個版本的jar等。
  • 外掛支援:支援擴充套件外掛,你可以開發適合自己團隊使用的工具。

Jenkins的由來

目前持續整合(CI)已成為當前許多軟體開發團隊在整個軟體開發生命週期內側重於保證程式碼質量的常見做法。它是一種實踐,旨在緩和和穩固軟體的構建過程。並且能夠幫助您的開發團隊應對如下挑戰:

  • 軟體構建自動化 :配置完成後,CI系統會依照預先制定的時間表,或者針對某一特定事件,對目標軟體進行構建。
  • 構建可持續的自動化檢查 :CI系統能持續地獲取新增或修改後簽入的原始碼,也就是說,當軟體開發團隊需要週期性的檢查新增或修改後的程式碼時,CI系統會不斷確認這些新程式碼是否破壞了原有軟體的成功構建。這減少了開發者們在檢查彼此相互依存的程式碼中變化情況需要花費的時間和精力(說直接一點也是錢啊,呵呵)。
  • 構建可持續的自動化測試 :構建檢查的擴充套件部分,構建後執行預先制定的一套測試規則,完成後觸發通知(Email,RSS等等)給相關的當事人。
  • 生成後後續過程的自動化 :當自動化檢查和測試成功完成,軟體構建的週期中可能也需要一些額外的任務,諸如生成文件、打包軟體、部署構件到一個執行環境或者軟體倉庫。這樣,構件才能更迅速地提供給使用者使用。

部署一個CI系統需要的最低要求是,一個可獲取的原始碼的倉庫,一個包含構建指令碼的專案。

下圖概括了CI系統的基本結構:

該系統的各個組成部分是按如下順序來發揮作用的:

  1. 開發者檢入程式碼到原始碼倉庫。

  2. CI系統會為每一個專案建立了一個單獨的工作區。當預設或請求一次新的構建時,它將把原始碼倉庫的原始碼存放到對應的工作區。

  3. CI系統會在對應的工作區內執行構建過程。

  4. (配置如果存在)構建完成後,CI系統會在一個新的構件中執行定義的一套測試。完成後觸發通知(Email,RSS等等)給相關的當事人。

  5. (配置如果存在)如果構建成功,這個構件會被打包並轉移到一個部署目標(如應用伺服器)或儲存為軟體倉庫中的一個新版本。軟體倉庫可以是CI系統的一部分,也可以是一個外部的倉庫,諸如一個檔案伺服器或者像Java.NET、 SourceForge之類的網站。

  6. CI系統通常會根據請求發起相應的操作,諸如即時構建、生成報告,或者檢索一些構建好的構件。

Jenkins就是這麼一個CI系統。之前叫做Hudson。

以下是使用Jenkins的一些理由:

  • 是所有CI產品中在安裝和配置上最簡單的。
  • 基於Web訪問,使用者介面非常友好、直觀和靈活,在許多情況下,還提供了AJAX的即時反饋。
  • Jenkins是基於Java開發的(如果你是一個Java開發人員,這是非常有用的),但它不僅限於構建基於Java的軟體。
  • Jenkins擁有大量的外掛。這些外掛極大的擴充套件了Jenkins的功能;它們都是開源的,而且它們可以直接通過web介面來進行安裝與管理。

Jenkins的目標

Jenkins的主要目標是監控軟體開發流程,快速顯示問題。所以能保證開發人員以及相關人員省時省力提高開發效率。

CI系統在整個開發過程中的主要作用是控制:當系統在程式碼儲存庫中探測到修改時,它將執行構建的任務委託給構建過程本身。如果構建失敗了,那麼CI系統將通知相關人員,然後繼續監視儲存庫。它的角色看起來是被動的;但它確能快速反映問題。

特別是它具有以下優點:

  • Jenkins一切配置都可以在web介面上完成。有些配置如MAVEN_HOME和Email,只需要配置一次,所有的專案就都能用。當然也可以通過修改XML進行配置。
  • 支援Maven的模組(Module),Jenkins對Maven做了優化,因此它能自動識別Module,每個Module可以配置成一個job。相當靈活。
  • 測試報告聚合,所有模組的測試報告都被聚合在一起,結果一目瞭然,使用其他CI,這幾乎是件不可能完成的任務。
  • 構件指紋(artifact fingerprint),每次build的結果構件都被很好的自動管理,無需任何配置就可以方便的瀏覽下載。