DevOps
DevOps(Development+Operations)強調共同對業務目標負責,以實現用戶價值作為唯一的評判標准:保證產品功能及時實現、成功部署和穩定使用;
- 是一種重視軟件開發人員(Dev)和IT運維技術人員(Ops)之間溝通合作的文化、運動或慣例,改善團隊之間的協作關系;
- 是一組過程、方法與系統的統稱,包含開發、測試和運維;
- 用於促進開發(應用程序/軟件工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合;
- 透過自動化“軟件交付”和“架構變更”的流程,使得構建、測試、發布軟件能夠更加地快捷、頻繁和可靠,按時交付軟件產品和服務;
總的說來:
- DevOps 是把人員、流程、產品進行結合,給用戶提供持續價值的一個過程,既涉及到人員、流程、工具,也涉及到產品。
- DevOps 最終目的是給客戶提供持續交付的價值,流程包括:產品的規划跟蹤、軟件開發、構建測試、產品部署、運維、監控和優化。
- 通常把 DevOps 這些流程通過一個流水線的方式串聯起來稱為一個 DevOps 的流水線,其核心目標就是持續給用戶交付有價值的產品。
簡而言之,DevOps不僅涉及技術背景,還包括非技術的文化方面。
在軟件開發和應用周期中,提供了一個機制或模式來培育“協作”意識,幫助不同角色的成員緊密協作,充分利用現有資源,遵循交付的商業價值,共同對“輸出”負責,對質量負責。
DevOps的好處與價值
對於業務與產品而言,DevOps的好處更多基於持續部署與交付。
從組織結構而言,DevOps是部門間溝通協作的一組流程和方法,有助於改善公司組織文化、提高員工的參與感。
- 代碼的提交直接觸發:消除等待時間,快速反饋
- 每個變化對應一個交付管道:使問題定位和調試變得簡單
- 全開發流程高效自動化:穩定,快速,交付結果可預測
- 持續進行自動化回歸測試:提升交付質量
- 設施共享並按需提供:資源利用最大化
可能的幾個關注點
DevOps絕不是推薦一定要在某一方面達到極致,而是從“整體”入手,充分激發“體系”的最佳效率。
- 雖然真正實現DevOps的成本高昂,但任何時候都是實現DevOps的最佳時機,因為隨着業務發展,成本一定是越來越高的;
- 組織文化上的變革,鼓勵不同的個體與部門共同協作,減少“內耗”;
- 合適的DevOps人員(最起碼保證在“向DevOps轉換階段”中,研發人員知曉運維,運維人員了解業務);
- 統一的標准、環境、工具、流程,例如:開發/測試環境盡可能地和生產環境保持一致;
- 自動化和持續交付,簡化重復性工作和減少不必要的等待
- 涉及多個技術支撐:敏捷開發、持續集成&部署、微服務、容器、雲環境等;
- 個體和團隊的成效都放在整個產品開發&運維生命周期內來進行評價;
DevOps能力環
DevOps與持續集成、持續交付
DevOps的應用場景往往是一個龐大復雜的背景和流程的場景,大都包含一個持續交付流水線。
- 開發人員:IDE、Git等開發和編譯工具
- 版本控制系統:分支策略、語義化版本
- 構建服務器:持續集成、代碼質量檢查
- 工件庫:存放二進制包
- 系統的包管理器:編譯或測試環境系統上管理二進制包
- 環境一致性
- 預發布或生產:預發布環境與生產環境互換(藍綠發布)
- 發布管理:在高程度自動化測試的基礎上實踐自動化或半自動化(人工介入)部署
- 問題管理系統
- 。。。。。。
因此,DevOps 是一個完整的面向IT運維的工作流,以 IT 自動化以及持續集成(CI)、持續部署(CD)為基礎,來優化程式開發、測試、系統運維等所有環節。
DevOps的技術要點由“持續集成/部署“”一線貫穿,主干開發是進行持續集成的前提,自動化以及代碼周邊集中管理是實施持續集成的必要條件。
換而言之,DevOps 是持續集成思想的延伸,持續集成/部署是 DevOps 的技術核心,在沒有自動化測試、持續集成/部署之下,DevOps就是空中樓閣。
一個完整的過程
- 開發團隊接到任務,需要完成一個變更
- 為了更加順利地開發,將這個變更分拆為幾個小變更
- 開發人員在本地開發並且測試,如果使用了測試驅動開發,在編寫功能代碼之前會先編寫測試,然后編寫能夠讓測試通過的實際代碼
- 開發人員將代碼提交到企業內部的Git版本控制系統上
- 構建服務器獲取這個變更並初始化構建流程,單元測試之后,變更可以被發布到二進制庫里
- 配置管理系統根據“策略”,在測試環境中安裝應用了新的變更
- 新安裝觸發自動化回歸測試,測試成功后,質量保證團隊開始做人工測試
- 人工測試通過后,質量保證團隊將“已通過”標識給予這個變革
- 變更在預發布環境中進行驗收測試
- 驗收測試完成后,預發布環境被切換成生產環境,而生產環境變為新的預發布環境
典型的CICD流水線過程
- 項目開發編寫代碼,然后把代碼推送到 GitLab 里存儲,通過 GitLab 的 hook 使 Jenkins 執行一些 CI 的過程,比如做一些單元測試,構建 Docker image
- 再把這個 Docker image 調用 helm 部署到開發環境或測試環境
- 在測試環境里通過 Jenkins 觸發一個集成測試的功能
- 完成后就可以把它部署到生產環境
- 通過 Kubernetes addon 的方式,把 Prometheus、Grafana 等監控組件部署到集群里,實現一整套從 CI 到 CD 的監控過程
DevOps黃金思維圈
時刻關注正在做什么,嘗試識別問題范圍,找出解決方案和改善途徑。
Why---》How---》What
Why(目的、理念)
持續且快速、可靠的自動交付軟件給用戶:
- 實現價值的持續交付,贏得市場競爭
- 提升研發(增值活動)的時間,極大化增值活動產出
How(方法、措施)
- 建設自動化、可重復、可靠的持續交付流水線(IT服務供應鏈)
- 主要包括代碼管理、持續集成、自動化測試、自動化部署、基礎設施自動化管理等方面的工程能力
What(現象、成果)
- 每次代碼提交都需要經過流水線驗證
- 每次部署的版本都經過多環境驗證
- 部署頻率可以得到提升
- 周期時間(從代碼提交到部署上線)的時間可以到分鍾級
- 部署失敗率低
- 部署失敗的修復時間短,影響小
初見
一些圖示
關系與演進
涉及的工具
DevOps的目標不是單靠一款工具就能實現的。
在各個階段,每個都有其單獨對應的目標。
依賴於組織的選擇,有着各種各樣的工具可以在相應的背景和趨勢下,實現當前業務目標,滿足中遠期的需求。