原文出處:https://www.cnblogs.com/beef/p/7743594.htmlhtml
ref:web
【DevOps】團隊敏捷開發系列--開山篇docker
https://www.cnblogs.com/hyhnet/p/8082390.html瀏覽器
如今DevOps已經成爲發展的趨勢了,那它又是怎麼實現落地的呢?安全
落實DevOps的指導思想服務器
首先咱們仍是要回到什麼是DevOps,若是你們忘記了能夠回到以前再溫故一下,包括我總結的DevOps公式。網絡
其實DevOps核心思想就是:「快速交付價值,靈活響應變化」。其基本原則以下:數據結構
高效的協做和溝通;架構
自動化流程和工具;併發
快速敏捷的開發;
持續交付和部署;
不斷學習和創新。
然而這些基本原則又是如何與項目研發息息相關的呢,也就是它們在咱們的開發過程當中的各個環節是如何體現的?請看下面一張來自《success with enterprise dev-ops - whitepaper》的介紹圖:
敏捷管理:一支訓練有素的敏捷開發團隊是成功實施DevOps的關鍵。
根據康威定律:軟件團隊開發的產品是對公司組織架構的反映。
因此根據公司狀況調整組織結構是首要條件,它將直接影響到需求、設計和開發階段的效率、以及溝通的成本。
關於團隊的溝通成本在《人月神話》中有個很好的計算公式:溝通成本 = n(n-1)/2,其中n爲人數,因此溝通成本將隨着組織人員的增長而呈指數級增加。而小而快的敏捷團隊如何劃分,我將在後面「DevOps的具體實施方法」一節中詳細介紹。
持續交付部署:實現應用程序的自動化構建、部署、測試和發佈。
經過技術工具,把傳統的手工操做轉變爲自動化流程,這不只有利於提升產品開發、運維部署的效率,還將減小人爲因素引發的失誤和事故,提前發現問題並及時地解決問題,這樣也保證了產品的質量。下圖展現了DevOps自動化的流程:
此圖來自個人新書《分佈式服務架構:原理、設計與實戰》,書中也有具體介紹持續交付部署的細節內容。
IT服務管理:可持續的、高可用的IT服務是保障業務正常的關鍵要素,它與業務是一個總體。
IT服務管理(ITSM)直接影響產品運營的整個生命週期,傳統的IT服務管理(像ITIL)在生產中作的很是好了,可是它對於DevOps來講又顯得過於繁瑣,因此有必要爲DevOps建立一個只關注業務持續性的ITMS,它只須要不多的必要資源來爲相應的業務提供服務,ITMS更多地從業務角度考慮了。
注:白話解釋下什麼是IT服務管理(ITSM),它是傳統的「IT管理」轉向爲「IT服務」爲主的一種模式,前者可能更關注具體服務器管理、網絡管理和系統軟件安裝部署等工做;然後者更關注流程的規範化、標準化,明肯定義各個流程的目標和範圍、成本和效益、運營步驟、關鍵成功因素和績效指標、有關人員的責權利,以及各個流程之間的關係等,好比創建線上事故解決流程、服務配置管理流程等;
而光有流程還不夠,由於流程主要是IT服務提供方內部使用的,客戶對他們並不感興趣,因此還需將這些流程按需打包成特定的IT服務,而後提供給客戶使用,好比在雲平臺上購買一臺虛擬雲主機同樣。
精益管理:創建一個流水線式的IT服務鏈,打通開發與運維的鴻溝,實現開發運維一體化的敏捷模式。
精益生產主要來源於豐田生產方式 (TPS)的生產哲學,它以下降浪費、提高總體客戶價值而聞名,它主要利用優化自動化流程來提升生產率、下降浪費。因此精益生產的精髓是即時制(JIT)和自動化(Jidoka)。
JIT(Just In time):JIT用一句話描述就是消耗最少的必要資源,以正確的數量,生產和運送正確的零件。在這種模式下工做,能夠最大程度上下降庫存,防止過早或者過分生產。大多數公司更傾向用庫存來避免潛在的停線風險,而豐田卻反其道而行之。經過減小庫存「逼迫」對生產中產生的問題作及時且有效的反應。固然JIT這一模式對解決問題的能力是至關大的考驗,在能力不足的狀況下,會有至關大的斷線風險。
Jidoka(Build in quality):自動化,日語表示爲「自働化」,字面含義是自動化,日語裏表示爲「自動化」,而在豐田TPS系統裏,特地給「動」字加上了「人」字旁變成了「働」,換句話說,TPS/精益生產渴望生產的過程控制能像「人」同樣智能,在第一時間就異常狀況下自動關閉。這種自動停機功能能夠防止壞件流入下游,防止機器在錯誤的生產狀態下形成損壞,也可讓人更好的在當前錯誤狀態下進行故障分析。當設備可以作到自動分析故障時,就能夠將監管機器的「人」真正解放出來,作到對人力成本的節省。
——來自知乎
下圖展現了豐田TPS(Toyota Production System)手冊中的精益小屋:
而精益軟件開發是精益生產和實踐在軟件開發領域的應用,總結爲以下七條原則:
消除浪費
加強學習
儘可能延遲決定
儘快發佈
下放權力
嵌入質量
全局優化
精益管理貫穿於整個DevOps階段,它鼓勵主動發現問題,不斷的優化流程,從而達到持續交付、快速反饋、下降風險和保障質量的目的。接下來讓咱們看看DevOps具體的實現方法。
DevOps的思想先進、理念完美,是目前爲止我以爲最好的解決方案,不過DevOps最終可以落地,很大程度上仍是歸功於它有一整套的技術和開源工具。接下來讓咱們一塊兒看看DevOps想着的技術棧吧。
本節內容若是展開的話涉及太多,我將概略地爲你們介紹下目前常見的一些開源DevOps技術工具,你們能夠根據本身的需求選擇使用,固然也可使用像VSTS(Visual Studio Team Services)這樣的集成團隊環境。
其中有些內容在個人新書中有詳細介紹,如代碼倉庫管理、虛擬機與容器化、持續集成&持續部署工具Jenkins、配置管理工具SaltStack。
Trello
Teambition
Worktile
Tower
以上工具使用大同小異,選擇一款適合本身團隊的就好。咱們公司主要使用的是Teambition,截張效果圖以下:
confluence
禪道
Jira
Bugzila
其中confluence和禪道主要是產品的需求、定義、依賴和推廣等的全面管理工具;而Jira和Bugzilla是產品的質量管理和監控能力,包括測試用例、缺陷跟蹤和質量監控等。目前咱們使用Jira較多。
Git
Gitlab
Github
Git是一個開源的分佈式版本控制系統;Gitlab和Github是用於倉庫管理系統的開源項目,它們使用Git做爲代碼管理工具,並在此基礎上搭建起來的web服務。咱們主要使用的是Git和Gitlab。
Git Flow
Git Flow是構建在Git之上的一個組織軟件開發活動的模型,是在Git之上構建的一項軟件開發最佳實踐。Git Flow是一套使用Git進行源代碼管理時的一套行爲規範和簡化部分Git操做的工具。Git Flow模型以下圖:
Github Flow
Github Flow是Git Flow的一個更簡單的替換方案,它只有一個feature分支和一個master分支,簡單而乾淨。Github Flow模型以下圖:
Gitlab Flow
GitHub Flow認爲你能夠經過合併feature分支直接把代碼部署到線上。Gitlab Flow模型以下圖:
Gradle
Maven
SBT
ANT
我目前主要使用Gradle和Maven,而Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化構建工具。它使用一種基於Groovy的特定領域語言(DSL)來聲明項目設置,拋棄了基於XML的各類繁瑣配置。面向Java應用爲主。當前其支持的語言限於Java、Groovy、Kotlin和Scala。
VMware
VirtualBox
Vagrant
Docker
VMware和VirtualBox是最經常使用的虛擬機,支持很是多的平臺,而Vagrant是構建在虛擬化技術之上的虛擬機運行環境管理工具。經過Vagrant能夠方便實現的對虛擬機的管理,包括創建和刪除虛擬機、配置虛擬機運行參數、管理虛擬機運行狀態、自動化配置和安裝開發環境必須的各種軟件、打包和分發虛擬機運行環境等。
Docker是一個開源的應用容器引擎,它讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的Linux機器上,也能夠實現虛擬化。
Jenkins
Hudson
Travis CI
CircleCI
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能,它的前身爲Hudson。
Travis CI 是目前新興的開源持續集成構建項目,它與jenkins很明顯的區別在於採用yaml格式,簡潔清新獨樹一幟。
CircleCI是一個爲web應用開發者提供服務的持續集成平臺,主要爲開發團隊提供測試,持續集成,以及代碼部署等服務。
Appium
Appium是一個移動端的自動化框架,可用於測試原生應用,移動網頁應用和混合型應用,且是跨平臺的。可用於IOS和Android以及firefox的操做系統。
Selenium
Selenium 測試直接在瀏覽器中運行,就像真實用戶所作的同樣。Selenium 測試能夠在 Windows、Linux 和 Macintosh上的 Internet Explorer、Mozilla 和 Firefox 中運行。
Mock測試
Mock測試就是在測試過程當中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來建立以便測試的測試方法。這個虛擬的對象就是Mock對象,Mock對象就是真實對象在調試期間的代替品。Java中的Mock框架經常使用的有EasyMock和Mockito等。
消費者驅動契約測試
契約測試是一種針對外部服務的接口進行的測試,它可以驗證服務是否知足消費方期待的契約。當一些消費方經過接口使用某個組件的提供的行爲時,它們之間就產生了契約。這個契約包含了對輸入和輸出的數據結構的指望,性能以及併發性。而PACT是目前比較流的消費者驅動契約測試框架。
Ansible
Puppet
Chef
IT運維自動化是指將IT運維中平常的、大量的重複性工做自動化,把過去的手工執行轉爲自動化操做。自動化是IT運維工做的昇華,IT運維自動化不單純是一個維護過程,更是一個管理的提高過程,是IT運維的最高層次,也是將來的發展趨勢。下圖爲經常使用自動化運維工具對比:
Zabbix
Zabbix是一個基於WEB界面的提供分佈式系統監視以及網絡監視功能的企業級開源解決方案。
ELK Stack日誌分析系統
ELK Stack是開源日誌處理平臺解決方案,背後的商業公司是Elastic。它由日誌採集解析工具 Logstash、基於 Lucene 的全文搜索引擎 Elasticsearch、分析可視化平臺 Kibana三部分組成。
雲監控(如Amazon CloudWatch)
Amazon CloudWatch 是一項針對 AWS 雲資源和在 AWS 上運行的應用程序進行監控的服務。您可使用 Amazon CloudWatch 收集和跟蹤各項指標、收集和監控日誌文件、設置警報以及自動應對 AWS 資源的更改
DevOps的思想先進、理念完美,是目前爲止我以爲最好的解決方案,不過DevOps最終可以落地,很大程度上仍是歸功於它有一整套的技術和開源工具。接下來讓咱們一塊兒看看DevOps想着的技術棧吧。
本節內容若是展開的話涉及太多,我將概略地爲你們介紹下目前常見的一些開源DevOps技術工具,你們能夠根據本身的需求選擇使用,固然也可使用像VSTS(Visual Studio Team Services)這樣的集成團隊環境。
其中有些內容在個人新書中有詳細介紹,如代碼倉庫管理、虛擬機與容器化、持續集成&持續部署工具Jenkins、配置管理工具SaltStack。
Trello
Teambition
Worktile
Tower
以上工具使用大同小異,選擇一款適合本身團隊的就好。咱們公司主要使用的是Teambition,截張效果圖以下:
confluence
禪道
Jira
Bugzila
其中confluence和禪道主要是產品的需求、定義、依賴和推廣等的全面管理工具;而Jira和Bugzilla是產品的質量管理和監控能力,包括測試用例、缺陷跟蹤和質量監控等。目前咱們使用Jira較多。
Git
Gitlab
Github
Git是一個開源的分佈式版本控制系統;Gitlab和Github是用於倉庫管理系統的開源項目,它們使用Git做爲代碼管理工具,並在此基礎上搭建起來的web服務。咱們主要使用的是Git和Gitlab。
Git Flow
Git Flow是構建在Git之上的一個組織軟件開發活動的模型,是在Git之上構建的一項軟件開發最佳實踐。Git Flow是一套使用Git進行源代碼管理時的一套行爲規範和簡化部分Git操做的工具。Git Flow模型以下圖:
Github Flow
Github Flow是Git Flow的一個更簡單的替換方案,它只有一個feature分支和一個master分支,簡單而乾淨。Github Flow模型以下圖:
Gitlab Flow
GitHub Flow認爲你能夠經過合併feature分支直接把代碼部署到線上。Gitlab Flow模型以下圖:
Gradle
Maven
SBT
ANT
我目前主要使用Gradle和Maven,而Gradle是一個基於Apache Ant和Apache Maven概念的項目自動化構建工具。它使用一種基於Groovy的特定領域語言(DSL)來聲明項目設置,拋棄了基於XML的各類繁瑣配置。面向Java應用爲主。當前其支持的語言限於Java、Groovy、Kotlin和Scala。
VMware
VirtualBox
Vagrant
Docker
VMware和VirtualBox是最經常使用的虛擬機,支持很是多的平臺,而Vagrant是構建在虛擬化技術之上的虛擬機運行環境管理工具。經過Vagrant能夠方便實現的對虛擬機的管理,包括創建和刪除虛擬機、配置虛擬機運行參數、管理虛擬機運行狀態、自動化配置和安裝開發環境必須的各種軟件、打包和分發虛擬機運行環境等。
Docker是一個開源的應用容器引擎,它讓開發者能夠打包他們的應用以及依賴包到一個可移植的容器中,而後發佈到任何流行的Linux機器上,也能夠實現虛擬化。
Jenkins
Hudson
Travis CI
CircleCI
Jenkins是一個開源軟件項目,是基於Java開發的一種持續集成工具,用於監控持續重複的工做,旨在提供一個開放易用的軟件平臺,使軟件的持續集成變成可能,它的前身爲Hudson。
Travis CI 是目前新興的開源持續集成構建項目,它與jenkins很明顯的區別在於採用yaml格式,簡潔清新獨樹一幟。
CircleCI是一個爲web應用開發者提供服務的持續集成平臺,主要爲開發團隊提供測試,持續集成,以及代碼部署等服務。
Appium
Appium是一個移動端的自動化框架,可用於測試原生應用,移動網頁應用和混合型應用,且是跨平臺的。可用於IOS和Android以及firefox的操做系統。
Selenium
Selenium 測試直接在瀏覽器中運行,就像真實用戶所作的同樣。Selenium 測試能夠在 Windows、Linux 和 Macintosh上的 Internet Explorer、Mozilla 和 Firefox 中運行。
Mock測試
Mock測試就是在測試過程當中,對於某些不容易構造或者不容易獲取的對象,用一個虛擬的對象來建立以便測試的測試方法。這個虛擬的對象就是Mock對象,Mock對象就是真實對象在調試期間的代替品。Java中的Mock框架經常使用的有EasyMock和Mockito等。
消費者驅動契約測試
契約測試是一種針對外部服務的接口進行的測試,它可以驗證服務是否知足消費方期待的契約。當一些消費方經過接口使用某個組件的提供的行爲時,它們之間就產生了契約。這個契約包含了對輸入和輸出的數據結構的指望,性能以及併發性。而PACT是目前比較流的消費者驅動契約測試框架。
Ansible
Puppet
Chef
IT運維自動化是指將IT運維中平常的、大量的重複性工做自動化,把過去的手工執行轉爲自動化操做。自動化是IT運維工做的昇華,IT運維自動化不單純是一個維護過程,更是一個管理的提高過程,是IT運維的最高層次,也是將來的發展趨勢。下圖爲經常使用自動化運維工具對比:
Zabbix
Zabbix是一個基於WEB界面的提供分佈式系統監視以及網絡監視功能的企業級開源解決方案。
ELK Stack日誌分析系統
ELK Stack是開源日誌處理平臺解決方案,背後的商業公司是Elastic。它由日誌採集解析工具 Logstash、基於 Lucene 的全文搜索引擎 Elasticsearch、分析可視化平臺 Kibana三部分組成。
雲監控(如Amazon CloudWatch)
Amazon CloudWatch 是一項針對 AWS 雲資源和在 AWS 上運行的應用程序進行監控的服務。您可使用 Amazon CloudWatch 收集和跟蹤各項指標、收集和監控日誌文件、設置警報以及自動應對 AWS 資源的更改
全面自動化 —— 部署、 升級、 擴展、 維護、 數據、 測試、 監測、 安全和策略管理。在自動化方面投入巨資,目標是100%的自動化,不考慮低於90%的可能性。
工具名稱 | 工具用途 |
---|---|
Docker | 虛擬化容器技術,快速構建獨立隔離服務 |
Jenkins | 自動化平臺,能夠配置自動化測試與持續部署 |
New Relic | 應用性能監測 |
Ansible | 自動化(配置管理工具)平臺,持續集成與編排 |
Kubernetes | 開源的docker編排工具,能夠發佈與回滾 |
JMeter | 基於Java的壓力測試工具。用於對軟件作壓力測試 |
還有不少工具可使用,這個具體咱們後續慢慢講來。