開發流程大致可分為一下幾個階段:
編碼 -> 構建 -> 集成 -> 測試 -> 交付 -> 部署
開發流程.png
持續集成(Continuous Integration)
持續集成是一種軟件開發實踐,即團隊開發成員經常集成他們的工作,通過每個成員每天至少集成一次,也就意味著每天可能會發生多次集成。每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤。
持續集成.png
所具備功能
- 全面的自動化測試:這是實踐持續集成&持續部署的基礎,同時,選擇合適的自動化測試工具也極其重要;
- 靈活的基礎設施:容器,虛擬機的存在讓開發人員和 QA 人員不必再大費周折;
- 版本控制工具:Git, SVN, CVS...
- 自動化的構建和軟件發布流程的工具:Jenkins, Buildbot, Travis CI, Strider, Go, Integrity...
- 反饋機制:如構建/測試的失敗,可以快速地反饋到相關負責人,以盡快解決達到一個更穩定的版本。
優點
- 減少風險:一天中進行多次的集成,并做了相應的測試,這樣有利于檢查缺陷,了解軟件的健康狀況,減少假定。
- 快速發現錯誤:每完成一點更新,就集成到主干,可以快速發現錯誤,定位錯誤也比較容易。
- 防止分支大幅偏離主干:如果不是經常集成,主干又在不斷更新,會導致以后集成的難度變大,甚至難以集成。
- 減少重復過程:可以將重復的編譯、集成、測試、審查、部署等動作都變成自動化的,無需太多人工干預,讓人們的時間更多的投入到動腦筋的、更高價值的事情上。
- 增強項目的可見性:讓我們能夠注意到趨勢并進行有效的決策。
- 建立團隊對開發產品的信心:因為他們清楚的知道每一次構建的結果,他們知道他們對軟件的改動造成了哪些影響,結果怎么樣。
- 讓產品可以快速迭代,同時還保持高質量。
持續交付(Continuous Delivery)
持續交付在持續集成的基礎上,將集成后的代碼部署到更貼近真實運行環境的「類生產環境」(production-like environments)中。持續交付優先于整個產品生命周期的軟件部署,建立在高水平自動化持續集成之上。
持續交付.png
優點
- 快速發布。能夠應對業務需求,并更快地實現軟件價值。
- 編碼->測試->上線->交付的頻繁迭代周期縮短,同時獲得迅速反饋;
- 高質量的軟件發布標準。整個交付過程標準化、可重復、可靠,
- 整個交付過程進度可視化,方便團隊人員了解項目成熟度;
- 更先進的團隊協作方式。從需求分析、產品的用戶體驗到交互 設計、開發、測試、運維等角色密切協作,相比于傳統的瀑布式軟件團隊,更少浪費。
持續部署(Continuous Deployment)
持續部署是指當交付的代碼通過評審之后,自動部署到生產環境中。持續部署是持續交付的最高階段。這意味著,所有通過了一系列的自動化測試的改動都將自動部署到生產環境。
持續部署.png
為什么說持續部署是理想的工作流程?
“開發人員提交代碼,持續集成服務器獲取代碼,執行單元測試,根據測試結果決定是否部署到預演環境,如果成功部署到預演環境,進行整體驗收測試,如果測試通過,自動部署到產品環境,全程自動化高效運轉。”
持續部署主要好處是,可以相對獨立地部署新的功能,并能快速地收集真實用戶的反饋。