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平臺。測試