1. 什麼是持續集成?
在軟件工程中,持續集成(CI)是指將全部開發者的工做副本天天屢次合併到主幹的作法。Grady Booch 在1991年的 Booch method 中首次命名並提出了 CI 的概念,儘管在當時他並不主張天天屢次集成。web
2. 持續集成服務器
持續集成服務器就是可以採用自動化的手段,來解放人的雙手,實現項目持續集成的工具。與之配套的軟件有TeamCity、Jenkins、Go等。數據庫
3. 持續集成系統的基本結構
1. 開發者檢入代碼到源代碼倉庫。服務器
2. CI系統會爲每個項目建立了一個單獨的工做區。當預設或請求一次新的構建時,它將把源代碼倉庫的源碼存放到對應的工做區。分佈式
3. CI系統會在對應的工做區內執行構建過程。工具
4. (配置若是存在)構建完成後,CI系統會在一個新的構件中執行定義的一套測試。完成後觸發通知(Email,RSS等等)給相關的當事人。測試
5. (配置若是存在)若是構建成功,這個構件會被打包並轉移到一個部署目標(如應用服務器)或存儲爲軟件倉庫中的一個新版本。軟件倉庫能夠是CI系統的一部分,也能夠是一個外部的倉庫,諸如一個文件服務器或者像Java.net、 SourceForge之類的網站。優化
6. CI系統一般會根據請求發起相應的操做,諸如即時構建、生成報告,或者檢索一些構建好的構件。網站
4. 持續集成工做模式的優勢
傳統開發模式.net
持續集成開發模式插件
經過對比傳統和持續集成開發模式後會發現,在持續集成模式中:
- 解放了重複性勞動:自動化部署工做能夠解放集成、測試、部署等重複性勞動,而機器集成的頻率明顯比手工高不少。
- 更快地修復問題:持續集成更早的獲取變動,更早的進入測試,更早的發現問題,解決問題的成本顯著降低
- 更快的交付成果:更早發現錯誤減小解決錯誤所需的工做量。集成服務器在構建環節發現錯誤能夠及時通知開發人員修復。集成服務器在部署環節發現錯誤能夠回退到上一版本,服務器始終有一個可用的版本。
- 減小手工的錯誤:在重複性動做上,人容易犯錯,而機器犯錯的概率幾乎爲零。
- 減小了等待時間:縮短了從開發、集成、測試、部署各個環節的時間,從而也就縮短了中間能夠出現的等待時機。持續集成,意味着開發、集成、測試、部署也得以持續。
- 更高的產品質量: 集成服務器每每提供代碼質量檢測等功能,對不規範或有錯誤的地方會進行標緻,也能夠設置郵件和短信等進行警告。
5. Jenkins簡介
5.1 什麼是Jenkins
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能。主要用於:持續、自動地構建/測試軟件項目、監控外部調用的執行工做。
5.2 Jenkins的主要特性
- 易於安裝-只要把jenkins.war部署到servlet容器,不須要數據庫支持。
- 易於配置-全部配置都是經過其提供的web界面實現。
- 集成RSS/E-mail經過RSS發佈構建結果或當構建完成時經過e-mail通知。
- 生成JUnit/TestNG測試報告。
- 分佈式構建支持Jenkins可以讓多臺計算機一塊兒構建/測試。
- 文件識別:Jenkins可以跟蹤哪次構建生成哪些jar,哪次構建使用哪一個版本的jar等。
- 插件支持:支持擴展插件,你能夠開發適合本身團隊使用的工具。
5.3 使用Jenkins的理由
- 是全部CI產品中在安裝和配置上最簡單的。
- 基於Web訪問,用戶界面很是友好、直觀和靈活,在許多狀況下,還提供了AJAX的即時反饋。
- Jenkins是基於Java開發的(若是你是一個Java開發人員,這是很是有用的),但它不只限於構建基於Java的軟件。
- Jenkins擁有大量的插件。這些插件極大的擴展了Jenkins的功能;它們都是開源的,並且它們能夠直接經過web界面來進行安裝與管理。
- 支持Maven的模塊(Module),Jenkins對Maven作了優化,所以它能自動識別Module,每一個Module能夠配置成一個job,至關靈活。