DevOps實踐系列文章,請參見連接报慕。
描述
在一個軟件產(chǎn)品公司中豆巨,一般的基礎設施會包括在每個產(chǎn)品線上的各種環(huán)境畜侦、以及針對這些環(huán)境構(gòu)建起來的部署流水線元扔。
- local:本地開發(fā)環(huán)境
- dev:內(nèi)部開發(fā)環(huán)境
- mock:團隊間協(xié)作時使用的模擬環(huán)境
- test:供測試人員測試環(huán)境
- performance:非功能需求測試環(huán)境
- stage:試運行環(huán)境(新功能部分目標用戶使用)
- production:對外開放的產(chǎn)品環(huán)境
一個已經(jīng)上線的正式產(chǎn)品,第一要務就是保證線上系統(tǒng)是穩(wěn)定可靠運行的旋膳。所以需要通過各種手段保證新功能上線澎语,線上系統(tǒng)問題的快速反饋與立即解決。根據(jù)不同公司產(chǎn)品形態(tài)的不同验懊,每個公司都需要有一套功能上線流程以保證線上系統(tǒng)的正常運行咏连。
上圖中比較詳盡的描述了一個功能從開發(fā)到上線的整體過程。且在過程中每一個過程都由不同的角色參與鲁森。最終保證系統(tǒng)在線上環(huán)境的正常運行祟滴。故根據(jù)上圖的流程下面對持續(xù)交付過程中操作進行分析。
分析與拆分
軟件開發(fā)是一個團隊合作的工作歌溉。在圖中由相關(guān)的人員做相關(guān)的推動之后功能才能進入到下一個步驟垄懂。每一個步驟都可以將動作分為:構(gòu)建、部署痛垛、測試和發(fā)布草慧。而每個步驟所做的內(nèi)容也有所不同,下面以步驟和環(huán)境例舉要做哪些操作:
步驟 | 構(gòu)建 | 部署 | 測試 | 發(fā)布 |
---|---|---|---|---|
開發(fā)集成 | 編譯 代碼掃描 單元測試 |
簡單部署 部分環(huán)境部署 |
開發(fā)測試 | 推送到測試環(huán)境 |
團隊間協(xié)作 | 編譯 自動接口測試 |
無部署 mock服務器 |
接口測試 | 將接口模擬發(fā)布 |
交付測試 | 編譯 自動驗收測試 |
全環(huán)境部署 | 自動回歸測試 | 推送到用戶驗證環(huán)境 |
交付運維 | 編譯 | 容器部署 負載節(jié)點 |
升級腳本驗證 release notes驗收 |
推送到正式環(huán)境 |
正式上線 | 編譯 構(gòu)建容器 |
容器部署 負載節(jié)點 |
無測試 | 允許回滾 |
對上面的操作進行拆分后匙头,可以分為對資源的管理工作:
- 二進制包
下載代碼漫谷、依賴管理、編譯蹂析、打包舔示、代碼掃描、單元測試 - 容器
構(gòu)建电抚、發(fā)布惕稻、拉取、運行 - 部署
架構(gòu)即代碼蝙叛、藍綠發(fā)布俺祠、回滾
設計原則
前一段時間寫了一篇分層架構(gòu)模式,這里以分層的方式去說明部署流水線的分層關(guān)系借帘。這里的分層其實是理解或概念的層面蜘渣。這里將分部署流水線設計分為幾個層次:服務層,流程層肺然,原子操作層蔫缸。
服務層
提供自定義能力,可以將流程和原子操作組合成一個適用于當前業(yè)務系統(tǒng)的狰挡。這個是最頂層捂龄,最實用的實用層。流程層
提供一整套流程提供各種各樣的流程加叁。大到可以將整體持續(xù)交付寫到一個Pipeline內(nèi)倦沧,也可以只對容器構(gòu)建,發(fā)布過程形成一個Pipeline它匕。只要之后可以用流程去組織各種各樣的大的服務展融。原子操作層
提供最基礎的原子操作。這里可以將上面提到的對資源的操作作為一個原子操作豫柬。不需要劃分的更小告希。
總結(jié)
最好的實踐,是在有大量項目的情況下去實現(xiàn)原子操作和流程層烧给,然后在這兩層上去實現(xiàn)具體項目的服務燕偶。如果產(chǎn)品型公司,比較好的方式是直接實現(xiàn)流程層和服務層础嫡。這樣既可以滿足業(yè)務要求指么,也可以降低流水線構(gòu)建的成本。