CI / CD是任何DevOps操作的兩大基石,這是一種開發軟件的方式,旨在生產快速而強大的軟件,隨時以可持續的方式發布更新。 當例行更改代碼時,開發周期會更加頻繁、更有意義且更快速。通過此過程,我們可以確保只有已知良好的代碼才能成為軟件產品的一部分。
Continuous Integration,Continuous Delivery,Continuous Deployment,即持續集成、持續交付和持續部署構成DevOps的3C。在這篇文章中,將從以下幾個方面闡述:傳統集成、持續集成及過程、持續交付、持續部署、3C優勢。
傳統集成
傳統集成時,團隊沒有任何類型的中央構建服務器。源代碼可以存儲在中央源代碼存儲庫中,但是開發人員不必定期提交更改。在計划發布之前,開發人員可能會手動集成更改,這會導致許多問題,例如由於許多開發人員同時集成而帶來的最后一刻的沖突,或者由於集成而導致的組件故障。
傳統集成的某些缺點如下:開發人員不經常集成代碼,導致最后一刻的隱患;反饋回路慢;由於需要修復許多組件而無法輕松解決問題;難以按時交付產品;高成本。為了克服這些問題,CI和CD應運而生,它們從技術角度和業務角度都具有許多優點。
持續集成Continuous Integration
持續集成是一種開發實踐,要求開發人員每天多次將代碼集成到共享存儲庫中,以避免代碼沖突。
然后,每個簽入均由自動構建進行驗證,從而使團隊可以及早發現問題。這使團隊可以花更少的時間進行回溯,而將更多的時間用於構建新功能。
這里的概念是在一個項目上有多個開發人員,以將資源庫的主分支保持為最新形式的源代碼,因此每個開發人員都可以簽出或者從最新的代碼中提取,以避免發生沖突。
集成過程
開發人員在自己特定的分支中開發其功能,然后將其新分支推送到協作存儲庫中。 運行自動化的單元測試和集成測試,並將錯誤和其他代碼質量問題通知團隊。一旦自動測試通過,開發人員就會創建拉取請求。開發人員和審閱者可以直接對開發人員提交給主分支的更改發表評論。
完成評審過程並將新代碼合並到主分支后,功能開發和錯誤修復周期將從集成的主分支繼續運行。這在團隊內(特別是每個人都在處理許多小任務的大型團隊)通常會在一天內發生多次,這意味着每個人都在同一個通用代碼庫上工作。這樣就大大減少了代碼的差異以及功能開發人員彼此之間不同步而引起的相關問題。
持續交付Continuous Delivery
持續交付是一個更改代碼會自動生成、自動測試並為發布到生產環境中做好准備的過程,軟件可以在任何時候發布到生產環境中。
持續集成的代碼提交將進一步進行性能和功能測試,直到批准發布為止。要有效執行持續交付,需要強大的持續集成。如果正確實施,開發人員將始終擁有已通過標准化測試過程的可部署的構建工件。
這個過程在開發人員提交代碼時開始,在登台環境中完成測試后結束,以便代碼可以部署到生產環境中。如果在自動測試過程中出現任何錯誤或Bug,CI工具將自動通過任意一種通知(如電子郵件或短信)告知開發人員。
持續交付通常涉及一個類似於生產的暫存區域,在將更改發布到生產之前,需要手動接受這些更改。
發布到生產環境的決策更多地是業務決策,而不是技術決策。
持續部署Continuous Deployment
持續部署與持續交付非常相似。二者唯一區別是,在持續部署中,所有通過自動化測試階段的代碼提交都將自動發布到生產環境中。
持續部署不需要在登台環境中進行任何手動測試,因為自動化測試將在發行版的所有階段中執行。
這兩種CD都依賴於實時基礎設施配置和應用程序監視工具,用以在部署之前發現由於缺乏人工驗證而在測試反饋循環中沒有被找出的問題。
3C的優勢
1、緩解風險
許多開發人員面臨這樣的問題:應用程序在本地環境可運行,但是在面對更高級可用性時無法運行。這是因為在本地環境和投入生產的地方可能存在很多不同之處。一些質量保證任務如瀏覽器測試,可以降低將Bug一直傳播到活動站點的風險。
2、加快上市時間
持續集成、持續部署和持續交付的應用可以讓團隊更快地發現故障並快速修復,從而提高軟件發布率,加快交付速度。
3、更改可追溯
所有團隊成員必須使用相同的源存儲庫來維護其代碼。很明顯,可以看到代碼庫被進行了哪些更改以及由誰進行了更改。
4、提高代碼覆蓋率
CI服務器檢查每一次構建的測試覆蓋率。無論你在何處提交未經測試類的新代碼,服務器都會顯示錯誤,因為沒有足夠的代碼覆蓋率,因此開發人員將致力於增加低層級可用性的覆蓋率,以便在部署到更高級的可用性時不會出現與代碼覆蓋率有關的問題。
5、質量:從優秀到卓越
CI有助於測試人員將項目總時間的50%用於運行集成的標稱測試、查找Bug和其他細微問題。這使得測試團隊能夠更深入地研究問題,測試更多的場景,並產生更好的總體質量和結果。
6、更少的積壓工作
將CI/CD納入團隊的開發過程中可以減少積壓工作中非關鍵缺陷的數量。這些小缺陷會在生產前被檢測出來,並在發布給最終用戶之前被修復。
7、用戶滿意度
隨着部署在連續的周期中運行,這將使團隊能夠跟蹤項目並實時提供反饋,並在必要時修復團隊中的缺點。通過一致的評審,新產品的開發將更加精細,並將更加符合終端用戶的期望。
8、減少團隊成員之間的摩擦
確保跨多個位置的多個開發人員工作的代碼始終集成到一個公共存儲庫中。這避免了由於大量和沖突的代碼提交而導致的混亂。
結論
在當今瞬息萬變的競爭環境中,開發商正努力將他們的產品快速投放市場,如果沒有一套簡潔而合適的流程,幾乎不可能發布高質量的代碼。因而,轉向持續集成和持續部署將極大地改變軟件開發過程。它將簡化整個過程,從而幫助團隊提供更穩定、更安全、更優質的產品。
參考文獻:Krishnagayathri Gopinath .Continuous Integration And Delivery [OL].(2020-04-27) https://dzone.com/articles/continuous-integration-and-delivery