請首先閱讀:
- 一步步實施 DevOps (一)
- 一步步實施 DevOps (二)
- 一步步實施 DevOps (三)
- 一步步實施 DevOps (四)
自動化部署
本章節重點談自動化部署,每個人對自動化部署都有自己的理解,每個企業對自動化部署的需求也不同。
目前很多雲平臺開始推出一些列 DevOps 工具,體驗了一下,仍然處在初級階段,也不十分成熟。嚴格的說他們實現的 CD (持續部署)。
前面講過持續集成不是 DevOps,這裏我要說持續部署也不是 DevOps。CD是從CI中分離出來的,將部署單獨提煉出來。
自動化部署遠比 CD 要複雜,涉及包括:
- 網絡層:網絡設備管理,負載均衡切換,路由表管理
- 系統層:基礎設施,操作系統,軟件運行環境,
- 軟件層:軟件部署,CD部分
- 緩存層:緩存的刷新
- 搜索層:重建全文索引
- 數據層:數據庫結構管理,數據庫數據管理
- 日誌層:誰,什麼時間,做了什麼操作,結果怎樣
- 除此之外,管理上還需要提案和審批流程等等
所以 CD (持續部署)解決不了企業的生產環境自動化部署需求,CD緊緊是CI (持續集成)運行完成後,將構建物部署到指定的運行環境中。通常CD並不提供回撤功能,所以極少由企業使用 CD 部署生產環境。
Git -> 編譯 -> 測試 -> 打包 -> 構建物 -> 部署 -> 運行
CI/CD 的流水線作業只能部署單一項目,對於大型網站就無能爲例,例如很多大型網站:
- 構建過程非常複雜,不僅僅是一個項目打包, 而是需要多個模塊,處理複雜的配置過程。
- 一次部署多臺服務器,每個服務器可能有多個實例,實例間相互依賴關係
- 需要遵守嚴格的部署和啓動順序
- 記錄部署日誌,文件的新增,覆蓋,刪除
- 部署時間點
- 升級不僅僅是代碼,還有數據庫,緩存……
- 需要改變負載均衡設備節點,設置防火牆策略
- 需要有完備的回撤方案
- 除此之外好虛考慮增量部署和差異部署,例如部署100mb 以上的大文件,甚至GB尺寸的文件
很多 DevOps 方案注重 Docker,K8s解決方案。但實際情況 Docker 並不適用於所有場景,更多是物理服務器,虛擬機,雲主機,刀片服務器…
使用 Docker 的前提是,Docker必須部署在宿主主機上,在雲主機中部署 Docker 意義不大。
很多企業大量使用雲主機,對 Docker 並無強烈的需求。
運維需要怎樣的自動化部署工具:
- 項目管理:升級提案,工作流轉,工作審批
- 備份管理:任何生產環境部署前都需要備份,必須實現增量備份和差異備份。
- 環境管理:環境部署,基礎設施管理
- 階段管理:開發,測試,生產
- 倉庫管理:分支切換,分支保護(例如只允許合併不允許提交)
- 配置管理:每個階段擁有自己的配置
- 文件過濾:排除過濾,包含獲取,替換過濾(替換指定文件中的內容,用戶不同階段的差異區分)
- 覆蓋刪除:覆蓋指定文件,刪除指定文件
- 內容優化:Grup, Webpack 優化,壓縮js, css,html5, 圖片雪碧圖…..
- 自動構建:編譯,測試,測試報告,打包
- 部署管理:節點管理,增量部署,差異部署,md5sum 校驗檢查
- 部署腳本:部署前腳本(停止),部署後腳本(啓動)或者環境初始化,解決部署依賴
- 時間線:誰,什麼時間,做了部署,可以指定時間點隨時回撤到指定版本。
- 部署日誌:誰,什麼時間,做了什麼操作,產生什麼結果
- 部署報告:生產 Issue或Ticker 報告
版權聲明
轉載請與作者聯繫,轉載時請務必標明文章原始出處和作者信息及本聲明。