持續整合(CI)初探

來源:互聯網
上載者:User

標籤:

前不久接觸了持續整合(Continuous Integration,CI)。

一、持續整合是什麼

首先說說“整合”的概念。在實際的軟體開發中,常常會發生兩種情境:

1.幾個項目組對同一個系統的不同功能分別開發,最終需要將所有的軟體功能整合到一個系統中;

2.軟體開發出來後,由於種種原因要進行更新升級。

上述兩種情境其實就是整合的含義。

瞭解了“整合”的概念之後,“持續整合”的概念就好理解了。顧名思義,就是比較頻繁地進行【自動整合】這個環節。(為什麼要自動整合呢?請參考本文第三部分:什麼情況要用到持續整合)

二、使用持續整合能有什麼好處

從持續整合的概念很容易看出,它的核心思想是“步步為營”,這種思想帶來如下好處:

  • 當測試失敗或者出現錯誤時,允許及時復原代碼。
  • 不斷測試修複整合問題,避免臨時抱佛腳。
  • 預警問題和衝突代碼。
  • 所有的代碼變化可以及時得到測試。
  • 及時向開發人員反饋他們編寫代碼的功能、品質和對系統的影響情況。
  • 頻繁的代碼檢查促進開發人員寫出模組化和簡潔的代碼。
  • 項目任何時候都保持在可運行狀態。

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

有好處自然也會有劣勢存在,這裡簡要說一下:

  • 強大的測試套件和編寫良好的測試代碼才能發揮自動化測試的優勢。
  • 一定的硬體成本(小項目忽略不計)。
  • 初始部署的人力成本。
三、什麼情況要用到持續整合

整合軟體的過程不是新問題,如果項目開發的規模比較小,軟體整合不是問題。但是如果項目很大,需要不斷添加新功能,則需要常常整合,這個時候就需要用到持續整合了。

四、持續整合如何實施

持續整合的實施,有不少說法,我比較認同阮一峰老師的說法(連結:http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html?utm_source=tuicool)。

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

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

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的部落格內容。

五、致謝

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

六、參考連結

持續整合是什嗎? - 阮一峰的部落格  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/

 

持續整合(CI)初探

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.