企業的救心丸,一帖“持續交付”就搞定!

什麼是持續集成?

持續集成,又稱為Continuous Integration(CI),根據敏捷大師Martin Fowler的定義:

持續集成是一種軟件開發實踐。在持續集成中,團隊成員頻繁集成他們的工作成果,一般每人每天至少集成一次,也可以多次。每次集成會經過自動構建(包括自動測試)的檢驗,以儘快發現集成錯誤。

從這個定義,我們可以理解到持續集成的關鍵思想:

持續集成非常快非常廉價,讓 Find Bugs 的時間大幅度降低,提高版本交付效率;

持續集成讓開發者可以有更多的時間在Fix Bugs,而非 Find Bugs;

持續集成在流水線是全自動化的過程,無需太多的人工干預;

持續集成是開發團隊每個成員的職責,所有版本開發的成果都需要經過集成校驗,提高質量;

如何實現持續集成?

隨著版本發佈的流程,我們來一步一步地規劃出一般持續集成具備的基本環節:研發同學從 SCM中checkout代碼進行日常的版本開發,完成後提交到代碼庫。

企業的救心丸,一帖“持續交付”就搞定!

CI Server實時監控代碼庫分支的變化,一旦檢測到分支代碼變更,就會自動拉取代碼。

企業的救心丸,一帖“持續交付”就搞定!

CI 服務器會自動編譯代碼,編譯成功後,會運行單元測試。

企業的救心丸,一帖“持續交付”就搞定!

注意,從編譯開始,任何一個環節失敗,自動構建都會馬上停止,並且把失敗信息郵件等方式自動通知研發同學。這就是CI的反饋能力,幫助研發同學找到bugs,保證版本質量。到目前為止,我們可以總結一下持續集成的一部分的最佳實踐:

  1. 有且僅有一個代碼倉庫;
  2. 自動化構建;
  3. 使用 TDD 開發模式,編寫單元測試和集成測試;
  4. 保證 CI 速度,CI越快,反饋效率越高,找到bugs速度越快,迭代效率越高;
  5. 項目組成員都可以查閱所有的集成構建歷史;

集成測試通過後,版本開始打發布包,自動部署到測試環境,並且運行部署後的測試。

企業的救心丸,一帖“持續交付”就搞定!

集成測試一般是指CIServer自動運行舊的功能測試用例或者其他固定的測試流程等等;每一次成功的構建,都會郵件通知項目組,然後測試同學會編寫新的功能測試用例、運行性能測試以及選擇性的迴歸測試等等,這也是持續集成流程裡面唯一需要人工干預的步驟。到目前,持續集成基本上結束了,在構建過程中任意一個步驟失敗,都會馬上停止,並且反饋到研發同學,同時我們也可以

總結出剩下的持續集成最佳實踐:自動化部署。

上面提到是持續集成的一般流程,給大家介紹持續集成的概念,但是在實際應用中業務環境可能更加複雜,例如:公司內部有大量的業務系統,通過API或者API網關關聯,研發團隊的成員在本地開發某一個組件時,需要開發環境的各大系統來聯調;為了迭代更快,單元測試、集成測試都可以在開發聯調環境來完成,在開發環境構建未通過前無需部署到測試環境;自動化部署測試環境後,測試同學會對版本進行更多的手工測試;缺少配置中心對配置進行環境和版本跟蹤。

因此,在這裡推薦一個持續集成生產模型給大家參考一下:

企業的救心丸,一帖“持續交付”就搞定!

該持續集成模型具有以下的優勢:

  1. 本地開發時可以聯調開發環境,更加方便的進行代碼測試和單元用例的編寫,對研發更加友好;
  2. 集成測試提前在開發環境完成,CI 反饋的速度更快;
  3. 開發環境和測試環境隔離,開發環境可能是唯一的,但是測試環境會有多套,主要提供給測試同學執行更多的人工測試,例如性能測試、新的功能用例測試等等;
  4. 測試同學維護開發環境和測試環境中的功能用例,還可以嵌入自動化測試管理系統來輔助管理;
  5. 配置管理的模式有2種:部署平臺管理配置,或者是直接由單獨的配置中心管理配置。

最後,要提醒一下大家,這裡只是提供一種比較成熟的思路,切忌生搬硬套,要切合公司的實際情況,梳理代碼開發和測試規範,並且應用到持續集成流程中。

本文作者:劉勁輝,前阿里移動事業群高級運維工程師,專注於DevOps、應用運維和平臺架構設計。


分享到:


相關文章: