DevOps知識點——3C知多少
本篇目錄
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

