DevOps - CI&CD

1 - CI與CD的聯繫與區別

持續集成(Continuous Integration)、持續交付(Continuous Delivery)和持續部署(Continuous Deployment)的過程,其實就是一個軟件開發優化的過程。安全

  • 統一流程:自動化地觸發編譯、集成、測試、交付和部署
  • 保證集成的有序性、可靠性,減小版本發佈的不合規性,避免手工打包、測試不充分等
  • 版本可控,問題可追溯:能夠回溯到具體版本

但三者有着不一樣的軟件自動化交付週期和做用。網絡

  • 持續集成是指軟件我的研發的部分向軟件總體部分交付,頻繁進行集成以便更快地發現其中的錯誤。
  • 持續交付創建在高水平自動化持續集成的基礎上,將集成後的代碼部署到更貼近真實運行環境的類生產環境中,進行更多的自動化測試。
  • 持續部署是指當交付的代碼經過評審以後,自動部署到生產環境中,能夠相對獨立地部署新的功能,並能快速地收集真實用戶的反饋。

2 - 爲何要構建CI&CD平臺?

利用開源工具和技術能夠搭建一個相對完善的CI&CD體系,可以應對大規模軟件開發所面對的交付問題。框架

  • 更新緩慢:代碼改動須要很長才能部署
  • 包管理混亂:依賴複雜、版本混亂
  • 安全性低:軟件包容易被篡改
  • 資源利用不充分:人工分配方式下,部分硬件資源沒法被有效利用
  • IP和端口緊張:被長時間的固定佔用,致使不夠用
  • 維護成本高:複雜的工具組合和框架,致使難以有效維護
  • 服務難伸縮:沒法根據實際服務需求快速擴充和縮小服務規模

3 - CI&CD工具棧

在實施DevOps過程當中,構建自動化、流程化、智能化的CI&CD,是必不可少的重要事項和核心部分。
CICD也是一個寬泛的的技術棧,包含衆多的工具與方法,主要包括以下環節和內容運維

  • 源代碼管理:版本管理(GitLab)、代碼掃描(Sonar)、代碼審覈(Gerrit)等
  • 集成部署:編譯打包(Maven)、流水線(Jenkins)、容器化部署(Docker)等
  • 自動化測試:單元測試(Junit/PyUnit)、測試框架(Robotframe)、接口測試(RESTful)等
  • 生產發佈:鏡像倉庫、鏡像管理、網絡管理(VLAN)、持久化方案、服務發現、服務編排(Kubernetes)等
  • 運維與監控:配置(Ansible)、監控(Zabbix)、日誌(ELK)等
    在實現CICD的過程當中,不只要理解理論,更要圍繞問題講思路、講辦法,講實際行動 ,也就是要掌握原理、要點和操做。

4 - CI&CD所須要具有的要素

  • 全面的自動化測試:構建實用的自動化測試流程和選擇合適的工具
  • 靈活的基礎設施。容器,虛擬機、雲平臺等
  • 版本控制工具與代碼倉庫
  • 自動化的構建和軟件發佈流程的工具
  • 反饋和分析機制:快速地反饋結果到相關人員,並迅速分析

5 - CI&CD的衡量指標

  • 代碼發佈頻率與週期
  • 代碼從提交到發佈的速度
  • 故障變動率
  • 事故恢復時間
  • 等等

6 - CI&CD實施雲平臺化

容器技術可以讓應用一次構建,處處運行(物理機、虛擬機、公有云、私有云、各種型系統等),加快了開發和構建,實現了快速交付和部署,同時還在系統操做層面提供資源隔離服務。
所以,CI&CD的虛擬化、容器化、雲平臺化是大規模部署最適合的途徑,也是企業提高生產力的合適選擇。工具

針對於大多數中小型企業來講,可能沒有資源或技術儲備去構建一個私有化的雲平臺,但能夠選擇在公有云上實現CI&CD。
當前主流雲平臺都提供了從代碼庫下拉代碼、編譯打包、單元測試、鏡像製做、容器發佈的功能,基本上具有了完整的持續集成、持續發佈和持續部署的服務能力。單元測試

7- CI&CD與DevOps的關係

DevOps是一套工具集合、一組過程與方法、一種組織形式與文化。
DevOps工具和方法的實踐與落地,具體的可見的結果就是構建一套高效可用的CI&CD平臺。
簡單的來講,在應用CI&CD後,再加上Web版本的門戶,集中的帳戶管理系統以及運維監控體系,便可打造一個基礎的自動化DevOps平臺。測試

相關文章
相關標籤/搜索