master分支永遠指向線上的生產環境,且只有master分支能夠指向線上生產環境。
nginx
新特性的開發分支以版本號遞增命名(如v1.1.5),項目結束後能夠刪除。多個新特性同時開發應該建立多個開發分支,分別以不一樣的版本號命名(如v1.1.4.1)
git
修復分支用於從master切出來用於修復線上bug的緊急調試分支。分支命名使用 操做者(目前) 來命名。主要是爲了不在多個hotfix修復過程當中的調試衝突問題。
json
爲了協調項目開發過程當中線上與新特新開發的衝突,以及緊急修復任務與未完成的新特性開發的衝突,採用了持續集成開發到測試到發佈的一體化方案。在整個DevOps中,環境治理是最重要的一方面。
app
在環境治理時,咱們定義了一下咱們須要怎樣的環境才能夠知足咱們的平常開發、測試和發佈的需求。測試
首先,咱們須要一個穩定的生產環境,所謂穩定。設計
其次,咱們須要一個靈活的開發測試環境。代理
爲了解決上面的提出的環境治理的需求,咱們對環境治理的方案作了以下設計?調試
多個特性能夠切出多個開發環境,線上bug也會切出一個開發環境,而後經過腳本切成hotfix環境進行調試。開發驗證後發佈到預發環境,通過發佈測試經過後發佈到生產環境。code
客戶端在開發過程當中多個開發環境並存,能夠根據客戶端發佈需求隨意進行特性之間的合併,而後在合併後的開發環境中進行集成測試。對於不發佈或者延後發佈的特性,依舊留存在開發環境中,能夠同步開發。客戶端經過header中攜帶ack=特性值
來實現動態切換開發環境。
開發
上面咱們設計好了環境治理的方案,那麼整個DevOps最核心的一環也就解決了,下面主要介紹這個治理方案的實現方法和思路。
集羣上咱們選擇使用Kubernets來構建整個服務體系。統一部署在Kubernets集羣上的各個環境,須要經過kubectl管理,點擊查看如何安裝和設置kubectl。
./bin/add_service.sh
。 執行這個命令的前提是本地安裝並配置好kubectl# 本地執行:切換開發環境和hotfix環境 kubectl exec $(kubectl get pods -o=name -l app=特徵值 |tail -n 1) sh ./change_env.sh 環境名
至此,整個持續集成的設計方案和使用方法已經說完了,下面是實現這個設計和操做中使用到的幾個腳本的實現方案的說明,這裏作個記錄以便你們繼續改進。
經過Kubenetes自帶多容器能力實現環境隔離,每一個環境建立一個獨立多deployment和service。
經過kubenetes的ingress實現nginx的反向代理能力,經過配置分發規則,將不一樣特徵值的請求映射到不一樣的service上去。
由於咱們的DevOps是集成在飛流上的,所以目前沒有找到構建kubectl環境的方式,後續發現了能夠改進,因此須要本地提取當前集羣的ingress配置到本地ing文件。而後自動化構建腳本將自動識別是否應該在ingress文件上添加新的service配置。