什麼是DevOps
- DevOps 強調的是高效組織團隊之間如何通過自動化的工具協作和溝通來完成軟體的生命週期管理,從而更快、更頻繁地交付更穩定的軟體
- Devops 包含了敏捷開發,測試,運維
- DevOps 是組織架構變革,更是團隊文化和思想觀念的變革
DevOps 的價值
- 填補開發,測試,運維之間的資訊鴻溝,改善團隊組織文化,提高參與感
- DevOps 是把人員、流程、產品進行結合,給使用者提供持續價值的一個過程,既涉及到人員、流程、工具,也涉及到產品
- DevOps 最終目的是給客戶提供持續交付的價值,流程包括:產品的規劃跟蹤、軟體開發、構建測試、產品部署、運維、監控和優化。
- 簡化重複性工作,減少不必要的等待,有工具進行釋出部署,減少誤操作的可能性
DevOps的目標
DevOps 必須以支援業務敏捷目標
- 精準,實時的響應客戶需求
- 更好的體驗和更高的效率
- 交付內容上關注完整的業務鏈條,交付過程上關注從業務,開發,運維在內的全鏈路流程實現端到端的快速響應,交付,穩定的執行
什麼是持續整合
頻繁的將程式碼整合到主幹,就是讓產品可以快速迭代,同時還能保持高質量。它的核心措施是,程式碼整合到主幹之前,必須通過自動化測試。只要有一個測試用例失敗,就不能整合
什麼是持續交付
頻繁地將軟體的新版本,交付給質量團隊或者使用者,以供評審。如果評審通過,程式碼就進入生產階段,它強調的是不管怎麼更新,軟體隨時隨地都是可以互動的
什麼是持續部署
指的是程式碼通過評審以後,自動部署到生產環境,程式碼在任何時刻都是可部署的,可以進入生產階段
Devops 工具實踐
明確目標:指導最終實踐的成果,DevOps 是一個比較寬泛的概念,不同的團隊,不同的公司,不同的預算,實踐出來的結果差異非常大,制定符合團隊的DevOps 目標,解決團隊實際的痛點,有利於實踐。
資源:DevOps 工具有很多的雲服務廠商,有預算,可以直接根據團隊的需求,購買整套的基礎設施,也可以利用開源的工具組裝搭建,比如,Jenkins ,docker ,git ,映象倉庫等
團隊文化:實踐DevOps 是一次團隊文化,組織架構的變革,比如引入敏捷專案管理,會根據Scrum 來調整團隊的組織架構,開發可能要學習一些部署的基礎知識,運維可能要學習一些開發的基礎知識,Scrum中文網:https://www.scrumcn.com/agile/scrum-knowledge-library.html
實踐
- 程式碼分支
- 明確開發,測試,線上等分支,明確分支的職責,設定對應的許可權,制定符合團隊的分支管理流程
- 明確程式碼合併的機制,制定合併的規則,例如
- 單元測試不通過,不能進行合併
- 程式碼Code Review 後才能合併
- 程式碼環境變數
- 明確環境所對應的程式碼環境變數
- 後端
- 開發環境:dev ,測試環境:test
- 前端
- 開發環境:dev ,測試環境:test
- 後端
- 明確程式碼依賴元件的環境
- Redis ,資料庫 ,訊息佇列, 日誌等
- 統一的命名方式,根據團隊情況,看是否做每個元件環境的隔離
- 最好統一技術棧和統一依賴的版本
- 前端依賴包私有化:proget 等
- 明確環境所對應的程式碼環境變數
- 資源
- 明確有哪些可用的資源,比如,伺服器,硬碟
- 根據預算資源和目標,尋找雲服務的廠商,直接採購完整的DevOps平臺
- 工具
- 使用開源的工具進行搭建
- 根據目標和目前實際部署情況,選擇合適的工具,團隊討論,制定部署的方式和流程
- 基於docker部署:映象倉庫,docker,docker-compose 等
- 基於檔案的方式部署
- 結合可用的資源,明確部署流程中,伺服器資源的作用,以及承擔的職責,畫出部署圖
- 根據目標和目前實際部署情況,選擇合適的工具,團隊討論,制定部署的方式和流程
- 使用雲服務進行搭建
- 阿里云云效 DevOps 平臺
- 華為雲 DevCloud 平臺
- 使用開源的工具進行搭建
持續整合
- 自動化構建專案流程
- 從原始碼倉庫簽出最新的程式碼
- 選擇原始碼管理工具,要支援webhooks , 比如:GIT
- 選擇合適的CI任務觸發機制,比如,提交程式碼就進行CI,或者手動點選CI任務進行CI
- 靜態分析,檢查最新的程式碼是否存在潛在的 bug 並符合專案的編碼規範
- 專案程式碼中選擇合適的編碼規範,比如Resharper,Sonar 等
- 整合SonarQube工具進行程式碼的檢查,視覺化的監控程式碼的質量
- 編譯原始碼
- 編譯原始碼看是否能成功編譯
- 執行單元測試
- 根據團隊的實際情況,為程式碼編寫單元測試,制定單元測試標準
- 不要盲目追求覆蓋率,而是思考業務上的價值(重要性與風險)
- 自動化執行單元測試,執行失敗進行反饋,也可以利用視覺化的工具,監控單元測試情況
- 單元測試執行失敗,開發人員應該及時的進行修復,保證CI的正常執行
- 執行整合測試
- 自動執行整合測試
- 打包
- 自動化打包
- 從原始碼倉庫簽出最新的程式碼
持續部署
- 根據部署可用的資源,明確部署的方式,討論出部署的方案
- 基於容器部署
- 基於檔案部署
- 明確部署的目標,制定部署的完整流程,完善配套的方案
- 高可用
- 灰度釋出
- 回滾方案
DevOps 度量指標
DevOps實踐的成熟度差異很大,團隊需要根據目標來制定符合團隊期望的DevOps度量指標,根據團隊使用的情況,不斷的優化Devops,解決實際中的痛點
- 單元測試的錯誤率,測試覆蓋率 ,CI修復時間
- 部署的頻率,部署的失敗率,部署時間
- 程式碼掃描漏洞出,BUG