一.DevOps是什麼?前端
DevOps一詞來自於Development和Operations的組合,突出重視軟件開發人員和運維人員的溝通合做,web
經過自動化流程來使得軟件構建、測試、發佈更加快捷、頻繁和可靠。後端
目前對DevOps有太多的說法和定義,不過他們有一個共同的思想:解決開發者和運維者之間曾經不可逾越的鴻溝,瀏覽器
加強開發者與運維者之間的溝通和交流,我的認爲,DevOps能夠用一個公式表達:服務器
文化觀念的改變 + 自動化工具 = 不斷適應快速變化的市場網絡
強調:DevOps是一個框架,是一個方法論,並非一套工具,他包括一系列的基本原則和實踐。前端工程師
其核心價值在於如下兩點:架構
- 更快速的交付,響應市場的變化
- 更多的關注業務的改進與提高
二.爲何須要DevOps?框架
1.產品迭代運維
在現實工做中,每每都是用戶不知道本身想要什麼,可是當咱們設計完一個產品後,他後告訴咱們不須要什麼,這樣咱們的產品須要反覆的迭代,
並且過程多是曲折的,那咱們有什麼好的辦法快速的交付價值,靈活的響應變化呢,答案就是DevOps,由於DevOps是面向業務目標,助力業務成功的最佳實踐。
2.技術革新
如今的IT技術架構隨着系統的複雜化不斷的革新,從最期的全部服務在一個系統中,發展到如今的微服務架構、從純手動操做到全自動流程、從單臺物理機到雲平臺
三.DevOps如何落地
1.落實DevOps的指導思想
- 高效的協做和溝通
- 自動化流程和工具
- 迅速敏捷的開發
- 持續交付和部署
- 不斷學習和創新
敏捷管理:一支訓練有素的敏捷開發團隊是成功實施DevOps的關鍵
持續交付部署:實現應用程序的自動化構建/部署/測試/發佈
經過技術工具,把傳統的手工操做轉變爲自動化的流程,這不只有利於提升產品開發、運維部署的效率,還能減小人爲因素引發的失誤和事故,提前發現問題並及時解決問題,這樣保證產品質量。
DevOps自動化流程:
IT服務管理:可持續的、高可用的IT服務是保障業務正常的關鍵要素,它與業務是一個總體。
IT 服務管理(ITSM),它是傳統的「IT 管理」轉向爲「IT 服務」爲主的一種模式,前者可能更關注具體服務器管理、網絡管理和系統軟件安裝部署等工做;然後者更關注流程的
規範化、標準化,明肯定義各個流程的目標和範圍、成本和效益、運營步驟、關鍵成功因素和績效指標、有關人員的責權利,以及各個流程之間的關係等,好比創建線上事故解決流程、服務配置管理流程等;
精益管理:創建一個流水線式的 IT 服務鏈,打通開發與運維的鴻溝,實現開發運維一體化的敏捷模式。
精益生產主要來源於豐田生產方式 (TPS)的生產哲學,它以下降浪費、提高總體客戶價值而聞名,它主要利用優化自動化流程來提升生產率、下降浪費。因此精益生產的精髓是即時制(JIT)和自動化(Jidoka)。
精益管理貫穿於整個 DevOps 階段,它鼓勵主動發現問題,不斷的優化流程,從而達到持續交付、快速反饋、下降風險和保障質量的目的。
四.實施DevOps的具體方法
1.創建快速敏捷的團隊
按照業務功能劃分團隊,創建溝通羣組,設置產品負責人(一個策劃人員)、Scrum Master(咱們通常選擇測試人員擔任,測試驅動開發模式)和開發者團隊(前端工程師、後端工程師、測試各一名
2.實施自動化的流程:
提交:工程師將代碼在本地測試後,提交到版本控制系統,如 Git 代碼倉庫中。
構建:持續整合系統(如 Jenkins CI),在檢測到版本控制系統更新時,便自動從 Git代碼倉庫里拉取最新的代碼,進行編譯、構建。
單元測試:Jenkins 完成編譯構建後,會自動執行指定的單元測試代碼。
部署到測試環境:在完成單元測試後,Jenkins 能夠將應用程序部署到與生產環境相近的測試環境中進行測試。
預生產環境測試:在預生產測試環境裏,能夠進行一些最後的自動化測試,例如使用Appium 自動化測試工具進行測試,以及與實際狀況相似的一些測試可由開發人員或客戶人員手動進行測試。
部署到生產環境:經過全部測試後,即可以使用灰度更新將最新的版本部署到實際生產環境裏
3.DevOps在實施過程當中常常遇到的問題
人手緊缺
跨部門協做,前期溝通培訓成本高
前期投入工做量大見效少。
五.DevOps技術棧
1.敏捷管理工具
Trello Teambition Worktile Tower
2.產品&質量管理
confluence 禪道 Jira Bugzila
其中 confluence 和禪道主要是產品的需求、定義、依賴和推廣等的全面管理工具;而Jira 和 Bugzilla 是產品的質量管理和監控能力,包括測試用例、缺陷跟蹤和質量監控等。目前咱們使用 Jira 和禪道較多。
· 3.代碼倉庫管理
Git Gitlab GitHub
Git 是一個開源的分佈式版本控制系統;Gitlab 和 Github 是用於倉庫管理系統的開源項目,它們使用 Git 做爲代碼管理工具,並在此基礎上搭建起來的 web 服務。咱們主要使用的是 Git 和 Gitlab。
4.自動化構建腳本
Gradle Maven SBT ANT
5.虛擬化與容器化
VMware VirtualBox Vagrant Docker
6.持續集成與持續部署
Jenkins Hudson Travis CI CircleCI
Jenkins 是一個開源軟件項目,是基於 Java 開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能,它的前身爲Hudson。
Travis CI 是目前新興的開源持續集成構建項目,它與 jenkins 很明顯的區別在於採用yaml 格式,簡潔清新獨樹一幟。
CircleCI 是一個爲 web 應用開發者提供服務的持續集成平臺,主要爲開發團隊提供測試,持續集成,以及代碼部署等服務。
7.自動化測試工具
Appium:Appium 是一個移動端的自動化框架,可用於測試原生應用,移動網頁應用和混合型應用,且是跨平臺的。可用於 IOS 和 Android 以及 firefox 的操做系統
Selenium:Selenium 測試直接在瀏覽器中運行,就像真實用戶所作的同樣。Selenium 測試能夠在Windows、Linux 和 Macintosh 上的 Internet Explorer、Mozilla 和 Firefox 中運行
Mock測試:Mock 測試就是在測試過程當中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來建立以便測試的測試方法。這個虛擬的對象就是 Mock 對象,Mock 對象就是真實對象在調試期間的代替品。
Java 中的 Mock 框架經常使用的有 EasyMock Mockito 等
8.自動化運維工具
Ansible Puppet Chef Saltstack
9.監控管理工具
zabbix:Zabbix 是一個基於 WEB 界面的提供分佈式系統監視以及網絡監視功能的企業級開源解決方案。
ELK Stack日誌分析系統:ELK Stack 是開源日誌處理平臺解決方案,背後的商業公司是 Elastic。它由日誌採集解析工具 Logstash、基於 Lucene 的全文搜索引擎 Elasticsearch、分析可視化平臺Kibana 三部分組成。
雲監控(如 Amazon CloudWatch):Amazon CloudWatch 是一項針對 AWS 雲資源和在 AWS 上運行的應用程序進行監控的服務。您可使用 Amazon CloudWatch 收集和跟蹤各項指標、收集和監控日誌文件、設置警報以及自動應對 AWS 資源的更改