隨着軟件發佈迭代的頻率愈來愈高,傳統的「瀑布型」(開發—測試—發佈)模式已經不能知足快速交付的需求。2009 年左右 DevOps 應運而生,開發運維一體化,經過自動化工具與流程讓整個軟件開發構建、測試、發佈更加快捷、頻繁、高效和可靠。docker
本系列將詳細講解Devops落地細節。將構建整個持續集成與交付的一整套體系與流程。對於將來要開篇的系列博文列表以下:shell
【DevOps】團隊敏捷開發系列(一)--開山篇
【DevOps】團隊敏捷開發系列(二)--版本控制之道Git
【DevOps】團隊敏捷開發系列(三)--代碼管理之道Gitlab
【DevOps】團隊敏捷開發系列(四)--先後端分離契機Swagger
【DevOps】團隊敏捷開發系列(五)--代碼編譯MAVEN
【DevOps】團隊敏捷開發系列(六)--自動化CI工具Jenkins
【DevOps】團隊敏捷開發系列(七)--自動化流程編排
【DevOps】團隊敏捷開發系列(八)--自動化單元測試Junit
【DevOps】團隊敏捷開發系列(九)--自動化性能壓測Jmater
【DevOps】團隊敏捷開發系列(十)--持續部署流程編排
【DevOps】團隊敏捷開發系列(番外篇)--Linux經常使用命令後端
Ops"是一個總括術語,泛指系統工程師、系統管理員、操做人員,發佈工程師、DBA、網絡工程師、安全專家和各類其餘分支和頭銜。"Dev"是開發人員的簡稱,但真正在實踐中意味着更普遍的"參與開發的產品"的全部人,可包括產品,質量保證,和其餘種類的學科。安全
DevOps(英文Development和Operations的組合)是一組過程、方法與系統的統稱,用於促進開發(應用程序/軟件工程)、技術運營和質量保障(QA)部門之間的溝通、協做與整合。它的出現是因爲軟件行業日益清晰地認識到:爲了按時交付軟件產品和服務,開發和運營工做必須緊密合做。 從2009年起,相關的工做組、專業組織和博客快速涌現。服務器
自動化(Automation)是指機器設備、系統或過程(生產、管理過程)在沒有人或較少人的直接參與下,按照人的要求,通過自動檢測、信息處理、分析判斷、操縱控制,實現預期的目標的過程。自動化技術普遍用於工業、農業、軍事、科學研究、交通運輸、商業、醫療、服務和家庭等方面。採用自動化技術不只能夠把人從繁重的體力勞動、部分腦力勞動以及惡劣、危險的工做環境中解放出來,並且能擴展人的器官功能,極大地提升勞動生產率,加強人類認識世界和改造世界的能力。所以,自動化是工業、農業、國防和科學技術現代化的重要條件和顯著標志。網絡
全面自動化 —— 部署、 升級、 擴展、 維護、 數據、 測試、 監測、 安全和策略管理。在自動化方面投入巨資,目標是100%的自動化,不考慮低於90%的可能性。可是,全面自動化也可能會引發自動化氾濫。集中審查和調整能夠控制Chef或Puppet腳本庫的無序增加。
DevOps戰略必須獲取本組織自頂向下的全面支持。整個行政領導團隊 ——不僅是首席信息官 ——應知道它爲何重要和怎樣使它取得成功。前後端分離
爲何咱們採用DevOps,首先來看一下傳統的開發運維模式。運維
首先,開發人員開發完畢,並進行簡單自測,和 手動 功能測試。
其次,開發人員利用IDE 手動 打包。
而後,將構建後的文件 手動 複製到公網服務器指定目錄。
最後,啓動程序並進行手工測試。
很明顯,在這個過程當中,有太多重複性的東西,會嚴重影響團隊效率。工具
咱們能夠簡單的來將咱們的系統優化,最終造成強大的自動化敏捷體系。性能
咱們能夠經過一些自動化平臺例如jenkins 進行自動化單元測試的集成。能夠很高效的對整個開發進行系統的單元測試,簡化測試流程,提高測試效率
經過一些列的代碼與版本控制管理工具,例如Git與Gitlab能夠很是有效的管理代碼、版本、分支、標籤等等。固然不只於此,還有不少比較優秀的工具供咱們使用。可是目前市場最流行的當屬Git與Gitlab體系。
針對於後端服務用Java開發的應用程序,咱們大可使用MAVEN或者Gradle進行統一的依賴管理及代碼編譯打包控制。能夠經過一些列Wiki進行配置觸發器,集成到jenkins等工具上,而後進行自動化的遠程節點打包。固然能夠在jenkins創建多個節點去持續多點出發集成。
經過強大的shell命令,讓咱們能夠在每一個服務器、每個環境當中,自由穿梭。對於自動化部署,須要按照實際需求,編寫不一樣的shell腳本,而後將相關流程進行配置,結合jenkins等工具,能夠快速實現每個環節的發佈。
DevOps團隊執行各類任務, 如:
1. 新虛擬服務器的配置
2. 配置網絡設備
3. 應用程序部署
4. 收集和聚合的日誌
5. 性能監視服務
6. 報警和自動修復的問題
7. 服務器和服務可用性監控
工具名稱 | 工具用途 |
---|---|
Docker | 虛擬化容器技術,快速構建獨立隔離服務 |
Jenkins | 自動化平臺,能夠配置自動化測試與持續部署 |
New Relic | 應用性能監測 |
Ansible | 自動化(配置管理工具)平臺,持續集成與編排 |
Kubernetes | 開源的docker編排工具,能夠發佈與回滾 |
JMeter | 基於Java的壓力測試工具。用於對軟件作壓力測試 |
還有不少工具可使用,這個具體咱們後續慢慢講來。
除了一整套DevOps的體系,咱們會在整個系統當中,穿插講解Docker容器的使用。對於咱們不少時候遇到的依賴或者安裝流程複雜的問題,均可以容器的方式快速解決,而且能夠快速啓動或銷燬多個服務。
未盡之處將會在系列博文中詳細說道。本文只是對系列博文的概要說明,本文也參考了互聯網不少資料整理所得。
本文出處:http://www.hanyahong.com/ (歡迎轉發、請註明出處!)