一次構建:可能包含編譯,測試,審查和部署,以及其餘一些事情,一次構建就是將源代碼放在一塊兒,並驗證軟件是否能夠做爲一個一致的單元運行的過程。能夠理解爲頻繁的在多個團隊的工做中集成,而且給與反饋的過程。團隊開發成員常常集成它們的工做,每次集成都經過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘早地發現集成錯誤。java
CI場景以下:shell
(1)開發人員向版本控制庫提交代碼,同時,集成構建計算機上的CI服務器正在輪詢檢查版本控制庫中的變動數據庫
(2)在提交發生以後,CI服務器檢測到版本控制庫中發生了變動,因此CI服務器會從庫中取得最新的代碼副本,執行構建腳本,該腳本將對軟件進行集成服務器
(3)CI服務器向指定的項目成員發成電子郵件,提供構建結果的反饋信息。maven
(4)CI服務器繼續輪詢版本控制庫中的變動。工具
一個典型的持續集成周期包括如下幾個步驟:測試
(1)持續集成服務器不斷從版本控制服務器上檢查代碼狀態,看代碼是否有更新。ui
(2)若是發現代碼有最新的提交,那麼就從版本控制服務器下載最新的代碼。編碼
(3)等代碼徹底更新之後,調用自動化編譯腳本,進行代碼編譯。spa
(4)運行全部的自動化測試。
(5)進行代碼分析。
(6)產生可執行的軟件,可以提供給測試人員進行測試。
在CI中您須要一個版本控制庫,好比(CVS或者SVN,subversion)來執行CI。版本控制庫,你們都知道SVN,能夠方便的管理源代碼,能夠沿着時間軸取得不一樣同版本的代碼。CI服務器在變動提交到版本庫後執行的集成構建,他會每一個一段時間去檢查版本庫中的變動,因此咱們須要對CI服務器進行配置。CI服務器還須要提供一個方便的顯示板來顯示構建的結果。可是CI服務器並非必須的,也能夠經過執行構建腳原本執行構建。
從上面咱們知道CI的4個基本特徵:與版本控制庫連接,構建腳本,某種類型的反饋機制,集成源代碼變動的過程。這也是CI系統的4個基本功能。一個好的CI系統的關鍵特徵就是速度,這個系統的本質就及時向開發者和項目風險承擔者提供反饋信息。
既然CI這麼好,但仍是有些團隊並無選擇使用,其實這是一個綜合考慮的結果。使用CI會增長一些成本的,好比增長了維護CI系統的開銷,變化太多尤爲是對於老項目須要改變不少才能實現CI。失敗的構建太多,若是在提交代碼以前沒有私有構建一次,就會形成在使用ci的時候變動變得頻繁。存在額外的硬件和軟件成本,使用ci就須要一臺獨立的集成服務器。
測試能達到多少代碼覆蓋率?
執行構建須要多長的時間?
平均的代碼複雜度如何?有多少代碼重複?
在版本控制系統中對構建版本打上標籤了嗎?
已部署的軟件存放在哪裏?
是否使用測試覆蓋率工具?
如何作好code review?
持續集成工具:jenkins、CruiseControl、Hudson、gauntlet
構建工具:Maven、Ant、groovy
CDBI:持續數據庫集成,即每次項目的版本控制庫中發生變動時,重建數據庫和測試數據。
Jenkins
Jenkins 是一個開源項目,提供了一種易於使用的持續集成系統,使開發者從繁雜的集成中解脫出來,專一於更爲重要的業務邏輯實現上。同時 Jenkins 能實施監控集成中存在的錯誤,提供詳細的日誌文件和提醒功能,還能用圖表的形式形象地展現項目構建的趨勢和穩定性。Jenkins 還提供了很是豐富的插件支持,這使得 Jenkins 變得愈來愈強大。咱們能夠方便的安裝各類第三方插件,從而方便快捷的集成第三方的應用。
PMD
靜態代碼分析工具,經過掃描Java源代碼,發現隱藏在其中的各類問題,包括重複代碼,日誌記錄不規範,異常處理不規範,未使用引入的包,支持ant集成。
這裏有關於PMD的一些介紹:http://blog.csdn.net/sadamdiyi/article/details/6073694
Checkstyle
提供了一個幫助JAVA開發人員遵照某些編碼規範的工具。它可以自動化代碼規範檢查過程。相比於PMD會更加側重於編碼標準(語法)方面的檢查,而PMD是側重於語義bug。
首先要知道一個持續集成環境須要包括三個方面要素:代碼存儲庫、構建過程和持續集成服務器。
代碼存儲庫通常使用SVN,
一、開始新建一個 Jenkins 項目, 因爲咱們須要鏈接 SVN 的代碼存儲器, 咱們選擇 Build a free-style software project。
二、而後配置這個 JenkinsTest 項目了,根據實際的 SVN 服務器服務器信息配置 Source Code Management,這能讓 Jenkins 知道如何從哪裏獲取最新的代碼。
三、根據開發須要,隔一段時間須要從新構建一次。選擇 Build periodically,在 Schedule 中填寫 0 * * * *對應的構建時間。
四、添加 build 的步驟了。Jenkins 提供了四個選項供咱們選擇,能夠根據須要執行或調用外部命令和腳本,例如ant、shell、maven等等。這些腳本都是根據須要本身配置的。
五、能夠在 Jenkins 中觀察構建的進度和最終的狀態——成功或者失敗。太陽表明以前的構建沒有任何失敗,藍色的小球表明構建成功。也能夠在JenkinsTest 查看單次構建的 Console 的輸出結果。從中能看到構建的第一步是從 SVN 服務器上 check out 代碼,而後在build。
具體的能夠參考:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/
後話:其實這就是我在公司實習時所謂的CBD,他們沒有使用集成工具,而是直接在服務器上執行CBD腳本,check代碼,build構建,deploy部署。