持續集成(CI)初探

前不久接觸了持續集成(Continuous Integration,CI)。html

1、持續集成是什麼

首先說說「集成」的概念。在實際的軟件開發中,經常會發生兩種情境:數據庫

1.幾個項目組對同一個系統的不一樣功能分別開發,最終須要將全部的軟件功能集成到一個系統中;服務器

2.軟件開發出來後,因爲種種緣由要進行更新升級。網絡

上述兩種情境其實就是集成的含義。ide

瞭解了「集成」的概念以後,「持續集成」的概念就好理解了。顧名思義,就是比較頻繁地進行【自動集成】這個環節。(爲何要自動集成呢?請參考本文第三部分:什麼狀況要用到持續集成)模塊化

2、使用持續集成能有什麼好處

從持續集成的概念很容易看出,它的核心思想是「步步爲營」,這種思想帶來以下好處:函數

  • 當測試失敗或者出現錯誤時,容許及時回滾代碼。
  • 不斷測試修復集成問題,避免臨時抱佛腳。
  • 預警問題和衝突代碼。
  • 全部的代碼變化能夠及時獲得測試。
  • 及時向開發人員反饋他們編寫代碼的功能、質量和對系統的影響狀況。
  • 頻繁的代碼檢查促進開發人員寫出模塊化和簡潔的代碼。
  • 項目任什麼時候候都保持在可運行狀態。

---------------------------------------工具

有好處天然也會有劣勢存在,這裏簡要說一下:單元測試

  • 強大的測試套件和編寫良好的測試代碼才能發揮自動化測試的優點。
  • 必定的硬件成本(小項目忽略不計)。
  • 初始部署的人力成本。

3、什麼狀況要用到持續集成

集成軟件的過程不是新問題,若是項目開發的規模比較小,軟件集成不是問題。可是若是項目很大,須要不斷添加新功能,則須要經常集成,這個時候就須要用到持續集成了。測試

4、持續集成如何實施

持續集成的實施,有很多說法,我比較認同阮一峯老師的說法(點擊查看)。

爲了方便查看,我直接引用了阮老師的關於實施的內容:

----------------------------------------------------------------------------------------------------------------------------------------

1 提交

流程的第一步,是開發者向代碼倉庫提交代碼。全部後面的步驟都始於本地代碼的一次提交(commit)。

2 測試(第一輪)

代碼倉庫對commit操做配置了鉤子(hook),只要提交代碼或者合併進主幹,就會跑自動化測試。

測試有好幾種。

單元測試:針對函數或模塊的測試
集成測試:針對總體產品的某個功能的測試,又稱功能測試
端對端測試:從用戶界面直達數據庫的全鏈路測試
第一輪至少要跑單元測試。

3 構建

經過第一輪測試,代碼就能夠合併進主幹,就算能夠交付了。

交付後,就先進行構建(build),再進入第二輪測試。所謂構建,指的是將源碼轉換爲能夠運行的實際代碼,好比安裝依賴,配置各類資源(樣式表、JS腳本、圖片)等等。

經常使用的構建工具以下。

Jenkins
Travis
Codeship
Strider
Jenkins和Strider是開源軟件,Travis和Codeship對於開源項目能夠無償使用。它們都會將構建和測試,在一次運行中執行完成。

4 測試(第二輪)

構建完成,就要進行第二輪測試。若是第一輪已經涵蓋了全部測試內容,第二輪能夠省略,固然,這時構建步驟也要移到第一輪測試前面。

第二輪是全面測試,單元測試和集成測試都會跑,有條件的話,也要作端對端測試。全部測試以自動化爲主,少數沒法自動化的測試用例,就要人工跑。

須要強調的是,新版本的每個更新點都必須測試到。若是測試的覆蓋率不高,進入後面的部署階段後,極可能會出現嚴重的問題。

5 部署

經過了第二輪測試,當前代碼就是一個能夠直接部署的版本(artifact)。將這個版本的全部文件打包( tar filename.tar * )存檔,發到生產服務器。

生產服務器將打包文件,解包成本地的一個目錄,再將運行路徑的符號連接(symlink)指向這個目錄,而後從新啓動應用。這方面的部署工具備Ansible,Chef,Puppet等。

6 回滾

一旦當前版本發生問題,就要回滾到上一個版本的構建結果。最簡單的作法就是修改一下符號連接,指向上一個版本的目錄。

----------------------------------------------------------------------------------------------------------------------------------------

須要說明的是,其中重要的是第3步——構建,它是持續集成實施的核心步驟。目前使用量比較大的是Jenkins,讀者能夠參考相關Jenkins的博客內容。

5、致謝

很是感謝阮一峯老師提供的視角,大學時期曾買過阮老師的書籍《如何變得有思想》,他的思想及寫做風格讓我大受裨益。

6、參考連接

持續集成是什麼? - 阮一峯的網絡日誌 http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html?utm_source=tuicool

集成開源系統實現自動化構建、代碼質量評估、項目信息統計 - 孤劍 - 博客園 http://www.cnblogs.com/AloneSword/archive/2011/11/05/2236950.html

Welcome to Jenkins CI! | Jenkins CI http://jenkins-ci.org/

相關文章
相關標籤/搜索