轉載本文需註明出處:微信公衆號EAWorld,違者必究。前端
引言:spring
大型項目協同是DevOps要面對的一個重要場景,其中多項目發佈上線協同,更是一個重要關鍵場景,一鍵發佈就是爲了解決這個場景而生的。本文主要介紹一鍵發佈的界面設計、模型設計以及接口設計等。後端
目錄:安全
1. 簡介springboot
2. 關鍵模型設計微信
3. 關鍵界面設計架構
4. 關鍵接口設計微服務
5. 關鍵表設計佈局
6. 總結ui
1. 簡介
大型項目協同是DevOps要面對的一個重要場景,其中多項目發佈上線協同,更是一個重要關鍵場景,一鍵發佈就是爲了解決這個場景而生的。
一鍵發佈是指在一個項目羣中,對其子項目的發佈定義進行編排,成爲一個發佈流水線,而後對發佈流水線執行一鍵發佈。
一、應用場景
1)多項目同時上線,項目之間有依賴關係
2)版本火車
二、關鍵能力
1)編排鬚要支持串行、並行、聚合能力
2)發佈流水線可以指定某些環境發佈,並支持環境權限控制
3)一鍵發佈時,能夠對發佈定義和發佈任務進行篩選
4)可以實時看到每個發佈定義和發佈任務的狀態,及其詳細執行日誌
2. 關鍵模型設計
關鍵模型說明:
1)發佈流水線:發佈定義編排,能夠配置環境類型,進行權限控制等;它的執行實例叫發佈流水線實例。
2)發佈定義:發佈環境編排;它的執行實例叫發佈實例。
3)發佈環境:配置環境類型,進行權限控制,配置執行引擎,部署任務編排等;它的執行實例叫發佈環境實例。
4)引擎流水線:引擎流水線任務編排;它的執行實例叫引擎流水線實例。
5)引擎流水線任務:最小的執行單元,好比拉代碼,部署springboot等;在構建流水線中,通常叫構建任務;在部署流水線中,通常叫部署任務;它的執行實例叫引擎流水線任務實例。
6)引擎流水線任務屬性:具體的流水線任務屬性。
3.關鍵界面設計
一、發佈流水線編排界面
發佈流水線編排關鍵功能:
1)支持選擇子項目中的發佈定義。
2)支持串行。
3)支持並行。
4)支持聚合。
5)支持環境設置。
二、發佈流水線發佈預覽界面
發佈預覽界面關鍵功能:
1)支持配置發佈流水號,也能夠自動生成。
2)支持對某一個發佈定義能夠選擇是否執行。
3)支持對發佈環境中的流水線任務能夠選擇是否執行。
三、發佈流水線發佈歷史界面
發佈歷史界面關鍵功能:
1)支持查看發佈流水行歷史發佈記錄。
2)支持查看發佈起止時間、進度、狀態、日誌等。
四、發佈流水線發佈實例詳情界面
發佈實例詳情界面關鍵功能:
1)支持查看每個發佈定義的發佈進度和結果。
2)支持查看某一個發佈定義下的日誌。
五、發佈流水線發佈日誌界面
發佈流水線的發佈日誌關鍵功能:
1)支持查看任何一個子項目的發佈定義的日誌。
2)支持在樹形菜單上能夠選擇查看某一個發佈環境,或者某一個引擎流水線任務的日誌。
3)支持對日誌進行全屏顯示。
六、發佈定義配置界面
發佈定義配置關鍵功能:
1)支持發佈環境編排:串行、並行、聚合等。
2)支持環境類型設定,引擎指定。
3)支持審批、確認類型配置
4)支持通知配置
七、引擎流水線任務編排界面
引擎流水線任務編排關鍵功能:
1)支持流水線任務編排:串行、並行、聚合等。
2)支持流水線任務屬性配置。
3)支持流水線任務失敗策略、失效等配置。
4.關鍵接口設計
一、發佈流水線接口
//建立發佈流水線ReleasePipeline createReleasePipeline(ReleasePipeline releasePipeline)//刪除發佈流水線ReleasePipeline removeReleasePipeline(String releasePipelineId)//啓動發佈流水線,注意:須要傳遞啓動的發佈定義,以及不執行的流水線任務ReleasePipelineInstance startReleasePipeline(String releasePipelineId, String[] releaseDefinitionIds, String[] disableEngineStageIds)//查詢某一個發佈流水線下的全部發布流水線實例PageResultList<ReleasePipelineInstance> queryReleasePipelineInstances(String releasePipelineId, boolean cascadeReleaseInstance, int pageIndex, int pageSize)
(左右滑動查看所有代碼)
發佈流水線接口關鍵功能:
1)編輯:建立、修改、克隆、刪除發佈流水線等
2)操做:啓動、終止發佈流水線等
3)查詢:查詢發佈流水線實例的進度、狀態等
二、發佈定義接口
//建立發佈定義ReleaseDefinition createReleaseDefinition(ReleaseDefinition releaseDefinition)//刪除發佈定義ReleaseDefinition removeReleaseDefinition(String releaseDefinitionId)//啓動發佈定義,注意:須要傳遞要部署的發佈環境,以及不執行的流水線任務ReleaseInstance startRelease(String releaseDefinitionId, String[] releaseEnvIds, String[] disableEngineStageIds)//查詢某一個發佈定義下的全部發布實例PageResultList<ReleaseInstance> queryReleaseInstances(String releaseDefinitionId, boolean cascadeReleaseEnvInstance, boolean cascadeEngineStageInstance, int pageIndex, int pageSize)// 獲取發佈環境的部署日誌BuildLog getReleaseEnvDeployLog(String releaseDefinitionId, String releaseInstanceId, String releaseEnvInstanceId, int start)
(左右滑動查看所有代碼)
發佈定義接口關鍵功能:
1)編輯:建立、修改、克隆、刪除發佈定義等
2)操做:
① 啓動、終止發佈定義等
② 部署、取消、審批發布環境等
3)查詢:
① 查詢發佈實例的進度、狀態等
② 查詢發佈環境實例的進度、狀態、日誌等
三、引擎流水線接口
//建立引擎流水線EnginePipeline createEnginePipeline(EnginePipeline enginePipeline)//刪除引擎流水線EnginePipeline removeEnginePipeline(String enginePipelineId)//執行引擎流水線EnginePipelineInstance executeEnginePipeline(String jobNamePrefix, EnginePipeline enginePipeline, Map<String, Object> pipelineContext)//獲取引擎流水線任務日誌BuildLog getEnginePipelineStageLog(String enginePipelineInstanceId, String engineStageInstanceId, int start)
(左右滑動查看所有代碼)
引擎流水線接口關鍵功能:
1)編輯:建立、修改、克隆、刪除引擎流水線等
2)操做:啓動、終止引擎流水線等
3)查詢:
① 查詢引擎流水線實例的進度、狀態、日誌等
② 查詢引擎流水線任務實例的進度、狀態、日誌等
5.關鍵表設計
一、發佈流水線表
發佈流水線表關鍵字段:
ENV_TYPE:環境類型,容許的部署環境類型設置,多個逗號分隔
二、發佈流水線和定義編排表
發佈流水線和定義編排表關鍵字段:
1)RELEASE_DEFINITION_ID:子項目的發佈定義ID
2)PRE_RELEASE_DEFINITIONS:前續發佈定義ID列表,多個逗號分隔
3)EXTEND:擴展信息,通常用於前端顯示佈局位置信息
三、發佈流水線實例表
發佈流水線和定義編排表關鍵字段:
1)RELEASE_DEFINITION_IDS:選擇的發佈定義ID列表,多個逗號分隔
2)INSTANCE_STATUS:實例狀態,成功,失敗,發佈中
3)BEGIN_TIME:發佈開始時間
4)END_TIME:發佈結束時間
5)ESTIMATED_DURATION:預估持續時間,用於計算進度
6)DURATION:實際持續時間
其餘實例表(發佈實例表、發佈環境實例表、引擎流水線實例表、引擎流水線任務實例表)字段相似
四、發佈定義表
五、發佈環境表
發佈環境表關鍵字段:
1)PRE_RELEASE_ENVS:前續發佈環境ID列表,多個逗號分隔
2)ENV_TYPE:環境類型,部署目標的環境類型設置,多個逗號分隔
3)ENGINE_PIPELINE_ID:引擎流水線ID
六、引擎流水線表
引擎流水線表關鍵字段:
1)STAGE_IDS:流水線任務ID列表(包含任務順序),多個逗號分隔
2)ENGINE_ID:執行引擎ID,多個逗號分隔(多個時,選擇最空閒的引擎)
3)ENGINE_NODE:執行引擎節點
七、引擎流水線任務表
八、引擎流水線任務屬性表
6.總結
一鍵發佈涉及多項目的部署,在具體實現過程當中涉及不少方面,好比構建、部署;有時候在某個環節,可能還須要定時,人工審批,權限控制等,是一個很長且複雜的批處理過程。
一鍵發佈是多項目並行開發過程當中,一塊兒上線必定會遇到的場景,若是經過人工操做來實現(如今不少企業的現狀),對於上線的穩定性,效率都會有很大的不肯定性,可是經過DevOps實現一鍵發佈,則會徹底不一樣,可以很容易的屢次演練,避免人爲的不肯定性和效率低下的問題。因此,一鍵發佈是DevOps解決大型項目協同場景的一個關鍵核心能力。
推薦閱讀
關於做者:飛白,現任普元軟件產品部資深開發工程師,畢業於大連民族大學,長期致力於IT技術研究、產品設計與開發等工做,擅長CI/CD、微服務、雲計算等領域技術。負責EOS產品後端設計開發工做;負責DevOps產品後端設計開發工做。
關於EAWorld:微服務,DevOps,數據治理,移動架構原創技術分享。