持續集成

雖然並非每個軟件項目都註定會獲得巨大成功,但一些軟件方法和最佳實踐可以提高成功機率,並讓開發工作更愉快。其中現在流行的一種做法是持續集成(CI,Continuous Integration)。

持續集成最初由Grady Booch在布區方法中提出,之後成爲了極限編程(extreme programming)的一部分,目的是防止集成問題堆積成爲“集成地獄(integration hell)”。

接下來,我們將從以下幾個方面一起了解什麼是持續集成以及如何利用它:

  • 什麼是持續集成
  • 持續集成的好處
  • 持續集成的要求
  • 持續集成服務器
  • 對於團隊的要求
  • 持續交付和持續部署
  • 潛在的擔心

什麼是持續集成

持續集成是指不斷整合項目更改並進行相應的測試,通常每天至少進行一次。

馬丁福勒說得很好:

 

自動化的構建、測試和部署流程可以解決軟件開發項目中的許多麻煩和問題。通過可靠的方法頻繁整合代碼更改,可以儘早發現錯誤。畢竟沒有人希望在demo day出現由於幾個月前編寫一直沒有適當的機會進行合理測試而出現的任何差池。

持續集成可以解決這一痛點,它的整個流程如下圖所示:

持續集成的好處

首先,降低集成風險。多數情況下,一個項目會有多個人單獨處理任務或者一部分代碼,人員越多,整合的風險越大,而調試、解決問題本身會是非常痛苦的,我們很可能需要大量修改代碼。頻繁的集成將極大減少此類問題。

第二,保障代碼質量。我們可以把精力放在業務代碼和功能上,從而獲得更高質量的軟件。

第三,有效的版本控制。如果有人提交的代碼有問題,團隊會即時收到通知,在有任何人拉取之前解決問題。

第四,減少團隊間摩擦。明確而公正的制度流程可以減少團隊之間的爭吵。

第五,改善測試團隊生活質量:) 通過不同版本和構建隔離並追蹤錯誤可以有效減輕測試團隊負擔。

第六,部署更快。自動化可以讓原本繁瑣耗時的部署工作變得輕鬆高效。

第七,增強團隊信心和士氣。團隊成員不必再爲潛在錯誤可能會造成的不良後果而憂心忡忡,可以輕裝上陣去創造更好的軟件。

另外還有一個好處是,團隊新成員可以更容易地融入整個項目之中。

持續集成的要求

落地持續集成系統,需要滿足以下要求:

首先版本控制系統(VCS)必不可少,我們需要可靠的方法來集中和保存項目的所有更改。

如果我們採用的是onsite解決方案,需要有備用的服務器(至少有臺虛擬機)。有一臺乾淨的機器來構建系統非常必要。

如果我們不想把服務器或者虛擬機搞得一團糟,可以選擇一些持續集成工具和解決方案,用來維護整個流程並獲得更強的伸縮性。

當然從技術上來講,持續集成工具不是必須的,就像軟件開發不是必須要用IDE一樣,具體怎麼選擇,在於我們的能力和需求。

持續集成服務器

持續集成服務器(也稱爲構建服務器,又稱CI服務器)是一種軟件工具,它包含所有持續集成操作,併爲我們構建項目提供可靠和穩定的環境。一般持續集成服務器具備高度可配置性和可調整性,能夠爲不同平臺構建各種項目。

使用持續集成服務器最好能夠安裝在乾淨的機器上,保證其在中立的環境中不受不必要的工具、環境變量和其他配置影響。如果實在沒有物理機,可以考慮構建一個虛擬環境。

另外使用開發機器而不設置虛擬環境,可能會導致錯誤的假設和結果。把應用部署到另一臺機器上時,會遇到新的問題。

持續集成服務器通常使用版本控制系統(如Subversion或Git或任何其他版本)來提取項目文件。該系統監控項目倉庫,在代碼成功提交時,會拉去更改並按照我們的定義來執行。完成任務後,持續集成服務器會向相關成員發送構建細節信息。檢查項目的最新版本、運行構建腳本、運行測試以及發送通知是持續集成服務器的最基本功能。

除此之外,代碼分析、代碼覆蓋率、代碼質量報告、agent pooling、pipeline、構建比較、IDE集成、第三方工具支持等功能,會讓持續集成服務器更加靈活好用。

對於團隊的要求

相比硬件、軟件或者工具,人的因素對於持續集成成功與否更爲關鍵,這要求團隊裏的每個成員都能養成良好的“持續集成”習慣,例如頻繁提交代碼、立即修復失敗構建、編寫單元測試等等。

持續交付和持續部署

典型的持續集成生命週期包括構建項目、單元測試、部署測試和驗收測試。一旦項目成功通過了所有階段,就可以將其部署到生產環境中。

交付項目到生產環境中可以像其他環節一樣自動完成,也可以根據業務需求手動完成。對於自動完成的情況,我們會瞭解到持續交付(Continuous Delivery)和持續部署(Continuous Deployment),其差異如下圖所示:

潛在的擔心

持續集成有很多好處,但也有人對它保持懷疑態度,主要考慮有以下幾點:

增加維護成本

我們本來也需要構建、測試和部署系統。如果不用持續集成來管理這些流程的話,也需要其他的工具,否則手工和人力將在項目達到一定複雜度時捉襟見肘

變化太大

一些認可能不太願意在遺留系統上做太多改變,這種情況下,可以考慮逐步進行,現在小部分工作上使用持續集成。如果大家對效果滿意,再引入落實到其他部分工作上。

硬件/軟件成本

與維護成本及項目完成後回頭解決問題的成本相比,實施持續集成的成本微不足道

開發者已經在做這些(持續集成的)工作

開發者本可以把時間集中在更有價值的業務開發上,而不是把精力浪費在重複性工作中。

項目太小

即使是很小的項目也可以從透明的開發構成與集中的項目資源和構建中獲益,許多在線持續集成工具設置起來非常簡單。

持續集成工具/平臺

市面上已有很多開源持續集成工具,例如我們熟悉的Jenkins,還有TeamCity、Travis CI、GO CD、Bamboo、Gitlab CI、CircleCI……等等等等。

開源PaaS Rainbond也支持持續集成,提供可擴展的CI/CD,支持Java、PHP、Python、Ruby、Node.js、Golang、Scala等源代碼構建,支持代碼滾動上線、一鍵回滾、灰度發佈、AB測試,可對接Jenkins等第三方CI/CD。

進一步瞭解請訪問Rainbond官網或試用公有云(新用戶7天免費)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章