1. 程式人生 > >Jenkins是什麼:持續整合(CI)流程、特點、應用場景

Jenkins是什麼:持續整合(CI)流程、特點、應用場景

那什麼是持續整合?Jenkins具體用來做什麼,對軟體開發有什麼益處呢?

總得來說,這兩者主要是涉及一個軟體質量的主題,特別是團隊開發軟體專案。下面就來介紹介紹下這兩者。

持續整合

持續整合,Continuous integration ,簡稱CI。

隨著軟體開發複雜度的不斷提高,團隊開發成員間如何更好地協同工作確保軟體開發的質量已經慢慢成為開發過程中不可迴避的問題。尤其是近些年來,敏捷(Agile) 在軟體工程領域越來越紅火,如何能在不斷變化的需求中快速適應和保證軟體的質量也顯得尤其的重要。

持續整合正是針對這一類問題的一種軟體開發實踐。倡導團隊開發成員必須經常整合他們的工作

,甚至每天都可能發生多次整合。而每次的整合都是通過自動化的構建來驗證,包括自動編譯、釋出和測試,從而儘快地發現整合錯誤,讓團隊能夠更快的開發內聚的軟體。

-------以我經過的專案(假設為A專案)為例進行描述---------

首先,解釋下整合

我們所有專案的程式碼都是託管在SVN伺服器上。

每個專案都要有若干個單元測試,並有一個所謂整合測試。

所謂整合測試就是把所有的單元測試跑一遍以及其它一些能自動完成的測試。只有在本地電腦上通過了整合測試的程式碼才能上傳到SVN伺服器上,保證上傳的程式碼沒有問題。

所以,整合指整合測試

再說持續

不言而喻,就是指長期的對專案程式碼進行整合測試。

既然是長期,那肯定是自動執行的,否則,人工執行則沒有保證,而且耗人力。

對此,我們有一臺伺服器,它會定期的從SVN中檢出程式碼,並編譯,然後跑整合測試。每次整合測試結果都會記錄在案。

完成這方面工作的就是下面要介紹的Jenkins軟體。

當然,它的功能遠不止這些。在我們的專案中,執行這個工作的週期是1天。也就是,伺服器每1天都會準時地對SVN伺服器上的最新程式碼自動進行一次整合測試。

持續整合的特點

  • 它是一個自動化的週期性的整合測試過程,從檢出程式碼、編譯構建、執行測試、結果記錄、測試統計等都是自動完成的,無需人工干預;
  • 需要有專門的整合伺服器來執行整合構建;
  • 需要有程式碼託管工具支援;

持續整合的作用

  • 保證團隊開發人員提交程式碼的質量,減輕了軟體釋出時的壓力;
  • 持續整合中的任何一個環節都是自動完成的,無需太多的人工干預,有利於減少重複過程以節省時間、費用和工作量;

持續整合(CI)的流程

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

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

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

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

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

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

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

上面我們瞭解了持續整合的知識。既然有這麼多的好處,那我們怎麼樣實現它呢?

這就是接下來要介紹的名角:Jenkins軟體。

 

Jenkins

Jenkins,原名Hudson,2011年改為現在的名字,它 是一個開源的實現持續整合的軟體工具。官方網站:http://jenkins-ci.org/

Jenkins 能實時監控整合中存在的錯誤,提供詳細的日誌檔案和提醒功能,還能用圖表的形式形象地展示專案構建的趨勢和穩定性

Jenkins特點

  • 易安裝:僅僅一個 java -jar jenkins.war,從官網下載該檔案後,直接執行,無需額外的安裝,更無需安裝資料庫;
  • 易配置:提供友好的GUI配置介面;
  • 變更支援:Jenkins能從程式碼倉庫(Subversion/CVS)中獲取併產生程式碼更新列表並輸出到編譯輸出資訊中;
  • 支援永久連結:使用者是通過web來訪問Jenkins的,而這些web頁面的連結地址都是永久連結地址,因此,你可以在各種文件中直接使用該連結;
  • 整合E-Mail/RSS/IM當完成一次整合時,可通過這些工具實時告訴你整合結果(據我所知,構建一次整合需要花費一定時間,有了這個功能,你就可以在等待結果過程中,幹別的事情);
  • JUnit/TestNG測試報告:也就是用以圖表等形式提供詳細的測試報表功能;
  • 支援分散式構建:Jenkins可以把整合構建等工作分發到多臺計算機中完成
  • 檔案指紋資訊:Jenkins會儲存哪次整合構建產生了哪些jars檔案,哪一次整合構建使用了哪個版本的jars檔案等構建記錄;
  • 支援第三方外掛:使得 Jenkins 變得越來越強大;

Jenkins應用場景

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

 

其它整合工具

其它比較著名的持續整合工具有:CruiseControl,TeamCity,Continuum等。

參考連結:http://velep.com/archives/867.html