基本概念 持續集成 (Continuous Intergration) 持續集成的重點在於構建編譯及測試,開發人員每天要提交很多次代碼到分支,在分支合併到主幹前,需要通過編譯和測試識別出問題。持續集成的流程就是通過自動化的構建(主要是構建編譯、自動化測試)來驗證,從而儘早地發現集成錯誤。 持續集 ...
基本概念
持續集成
(Continuous Intergration)
持續集成的重點在於構建編譯及測試,開發人員每天要提交很多次代碼到分支,在分支合併到主幹前,需要通過編譯和測試識別出問題。持續集成的流程就是通過自動化的構建(主要是構建編譯、自動化測試)來驗證,從而儘早地發現集成錯誤。
持續集成的核心意義:通過自動化測試儘早的發現代碼的問題。
持續交付
(Continuous Delivery):
持續交付指的是將產品儘可能快的發佈上線的過程。持續交付是在持續集成基礎上的擴展,也就是說除了自動化編譯、自動化測試,為了儘快上線我們還需要自動化發佈流程,整個流程實現後,根據實際需要,可以周期性的進行產品上線發佈,上線方式為人工點擊部署實現快速上線。部署環境的先後部署順序,一般在公司都是開發環境、測試環境、預發佈環境(類生產環境)和正式生產環境,如果代碼在預發佈環境測試通過,那麼就可通過手動的方式部署生產環境實現上線的目的。
持續交付的核心意義:儘快的將最終的產品發佈到線上環境,給用戶使用。持續交付是每個企業追求的目標,我們常說的CI/CD里的CD一般指的就是持續交付。
持續部署
(Continuous Deployment):
持續部署就是在持續交付的基礎上,將編譯、測試、打包部署到生產環境的過程做成自動化。
持續部署的核心意義:持續的將迭代的需求自動化的方式部署到生產環境。一般來說,非生產環境的持續部署基本都能實現。但生產環境的持續部署並不是每個企業都能做到,主要原因是受限於各種系統功能依賴、自動化測試不完善等因素,自動化一旦部署到生產,將可能造成嚴重生產事故。
說明:無論是持續集成、持續交付還是持續部署,如果要實現整個流程,基本上離不開CI伺服器。
持續集成
特點
- 快速定位錯誤,測試環節可以及時暴露問題;
- 避免大幅度偏離主幹,藉助統一的代碼庫;
- 減少不必要的成本投入,可以自動化解決的重覆乏味的事情,沒必要浪費人力和時間;
工作流程
工作階段
持續集成工作流程大體包括這麼幾個階段:
-
初始化CI流程
基本的CI流程的配置,比如腳本、定時任務等。
-
拉取最新代碼
從源碼倉庫拉取最新代碼到構建伺服器磁碟上。
-
構建
一般源碼倉庫自包含構建,可通過配置的腳本觸發執行構建。比如Java的構建一般基於Maven或Gradle。
-
執行測試
測試階段一般包含單元測試和集成測試。Java中的單元測試常指JUnit。
-
結果處理
CI流程執行的最後結果要麼是成功,要麼是失敗,結果需要通知給對應的人員,一般的通知方式有郵件、釘釘、簡訊。
集成工具
-
Travis CI
-
Bamboo
-
TeamCity
-
CircleCI
-
Gitlab CI
-
Jenkins
DevOps
概念
DevOps這個詞,其實就是Development(開發)和Operation(運維)兩個詞的組合。
DevOps 不是一項技術,也不是一套流程和方法論,更不是一套簡單的工具產品。DevOps的維基百科定義是這樣的:DevOps是一組過程、方法與系統的統稱,用於促進開發、技術運營(運維)和質量保證(QA)部門之間的溝通、協作與整合。
通過實踐 DevOps,可以將開發、測試、運維之間的工作串聯起來,以持續構建、自動化測試、持續發佈為目標,將所有流程全部自動化,最大化減少了重覆性的人力投入。同時,基礎環境的自動化構建也降低了由於人的原因帶來的意外風險。下圖為DevOps所包含的流程:
DevOps 這個詞是Patrick Debois 於2009 年創造的。出生於比利時的Patrick 先生曾經是一名苦悶的IT 咨詢師,飽受開發和運維相互割裂及傷害之苦。2009 年他參加了一個技術大會,在會上聽了名為10+ Deploys Per Day: Dev and Ops Cooperation at Flickr 的演講,深受啟發,並創造了DevOps 這個詞。
目前,DevOps處於高速增長的階段。尤其是在大企業中,DevOps受到了廣泛的歡迎。越大的企業,越喜歡DevOps。包括Adobe、Amazon、Apple、Airbnb、Ebay、Etsy、Facebook、LinkedIn、Netflix、NASA、Starbucks、Walmart、Sony等公司,都在採用DevOps。
工具鏈
由於DevOps是一種跨職能的工作模式,因此實踐過程需要使用不同的工具集(被稱為 "工具鏈"),而不是單一的工具集。這些工具鏈應該符合以下一個或多個類別,這些類別反映了開發和交付過程中的關鍵環節:
-
編碼---代碼開發和審查、源代碼管理工具、代碼合併
-
構建---持續集成工具,構建狀態
-
測試---持續測試工具,提供快速、及時的業務風險反饋
-
發佈---變更管理、發佈審批、發佈自動化
-
配置---基礎設施配置和管理,基礎設施作為代碼工具的基礎設施
-
監控---應用性能監控、終端用戶體驗
DevOps生態圈工具鏈圖:
常用工具
DevOps 需要要通過技術工具鏈完成持續集成、持續交付、用戶反饋和系統優化的整合。工具鏈包括版本控制&協作開發工具、自動化構建和測試工具、持續集成&交付工具、部署工具、維護工具、監控,警告&分析工具等等。
- 版本控制&協作開發:GitHub、GitLab、BitBucket、SubVersion、Coding、Bazaar
- 自動化構建和測試:Apache Ant、Maven 、Selenium、PyUnit、QUnit、JMeter、Gradle、PHPUnit
- 持續集成&交付:Jenkins、Capistrano、BuildBot、Fabric、Tinderbox、Travis CI、flow.ci Continuum、LuntBuild、CruiseControl、Integrity、Gump、Go
- 容器平臺:Docker、Rocket、Ubuntu(LXC)、第三方廠商如(AWS/阿裡雲)
- 配置管理:Chef、Puppet、CFengine、Bash、Rudder、Powershell、RunDeck、Saltstack、Ansible
- 微服務平臺:OpenShift、Cloud Foundry、Kubernetes、Mesosphere
- 服務開通:Puppet、Docker Swarm、Vagrant、Powershell、OpenStack Heat
- 日誌管理:Logstash、CollectD、StatsD
- 監控,警告&分析:Nagios、Ganglia、Sensu、zabbix、ICINGA、Graphite、Kiban
DevOps的目標
-
更快的上市時間
-
提高部署頻率
-
更短的修複時間
-
降低發佈失敗率
-
更快的平均恢復時間
總結來說DevOps的目標是最大限度地提高運營流程的可預測性、效率、安全性和可維護性。
小結
兩者關係
-
由DevOps的流程和工具鏈我們可以得知,DevOps 是持續集成思想的延伸
-
持續集成/部署是 DevOps 的技術核心,在沒有自動化測試、持續集成/部署之下,DevOps就是空中樓閣。
本文由
傳智教育博學谷
教研團隊發佈。如果本文對您有幫助,歡迎
關註
和點贊
;如果您有任何建議也可留言評論
或私信
,您的支持是我堅持創作的動力。轉載請註明出處!