DevOps知識點——3C知多少

陳琦聊測試發表於2020-05-27


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