DevOps平臺之一鍵釋出設計

EAWorld發表於2020-04-06

DevOps平臺之一鍵釋出設計引言:

大型專案協同是DevOps要面對的一個重要場景,其中多專案釋出上線協同,更是一個重要關鍵場景,一鍵釋出就是為了解決這個場景而生的。本文主要介紹一鍵釋出的介面設計、模型設計以及介面設計等。

目錄:

1. 簡介

2. 關鍵模型設計

3. 關鍵介面設計

4. 關鍵介面設計

5. 關鍵表設計

6. 總結

1. 簡介

DevOps平臺之一鍵釋出設計

大型專案協同是DevOps要面對的一個重要場景,其中多專案釋出上線協同,更是一個重要關鍵場景,一鍵釋出就是為了解決這個場景而生的。
一鍵釋出是指在一個專案群中,對其子專案的釋出定義進行編排,成為一個釋出流水線,然後對釋出流水線執行一鍵釋出。
1、應用場景
1)多專案同時上線,專案之間有依賴關係
2)版本火車
2、關鍵能力
1)編排需要支援序列、並行、聚合能力
2)釋出流水線能夠指定某些環境釋出,並支援環境許可權控制
3)一鍵釋出時,可以對釋出定義和釋出任務進行篩選
4)能夠實時看到每一個釋出定義和釋出任務的狀態,及其詳細執行日誌

2. 關鍵模型設計

DevOps平臺之一鍵釋出設計
關鍵模型說明:
1)釋出流水線:釋出定義編排,可以配置環境型別,進行許可權控制等;它的執行例項叫釋出流水線例項。
2)釋出定義:釋出環境編排;它的執行例項叫釋出例項。
3)釋出環境:配置環境型別,進行許可權控制,配置執行引擎,部署任務編排等;它的執行例項叫釋出環境例項。
4)引擎流水線:引擎流水線任務編排;它的執行例項叫引擎流水線例項。
5)引擎流水線任務:最小的執行單元,比如拉程式碼,部署springboot等;在構建流水線中,一般叫構建任務;在部署流水線中,一般叫部署任務;它的執行例項叫引擎流水線任務例項。
6)引擎流水線任務屬性:具體的流水線任務屬性。

3.關鍵介面設計


1、釋出流水線編排介面

DevOps平臺之一鍵釋出設計
釋出流水線編排關鍵功能:
1)支援選擇子專案中的釋出定義。
2)支援序列。
3)支援並行。
4)支援聚合。
5)支援環境設定。
2、釋出流水線釋出預覽介面
DevOps平臺之一鍵釋出設計
釋出預覽介面關鍵功能:
1)支援配置釋出流水號,也可以自動生成。
2)支援對某一個釋出定義可以選擇是否執行。
3)支援對釋出環境中的流水線任務可以選擇是否執行。
3、釋出流水線釋出歷史介面
DevOps平臺之一鍵釋出設計
釋出歷史介面關鍵功能:
1)支援檢視釋出流水行歷史釋出記錄。
2)支援檢視釋出起止時間、進度、狀態、日誌等。
4、釋出流水線釋出例項詳情介面
DevOps平臺之一鍵釋出設計
釋出例項詳情介面關鍵功能:
1)支援檢視每一個釋出定義的釋出進度和結果。
2)支援檢視某一個釋出定義下的日誌。
5、釋出流水線釋出日誌介面

DevOps平臺之一鍵釋出設計


釋出流水線的釋出日誌關鍵功能:
1)支援檢視任何一個子專案的釋出定義的日誌。
2)支援在樹形選單上可以選擇檢視某一個釋出環境,或者某一個引擎流水線任務的日誌。
3)支援對日誌進行全屏顯示。
6、釋出定義配置介面
DevOps平臺之一鍵釋出設計
釋出定義配置關鍵功能:
1)支援釋出環境編排:序列、並行、聚合等。
2)支援環境型別設定,引擎指定。
3)支援審批、確認型別配置
4)支援通知配置
7、引擎流水線任務編排介面
DevOps平臺之一鍵釋出設計
引擎流水線任務編排關鍵功能:
1)支援流水線任務編排:序列、並行、聚合等。
2)支援流水線任務屬性配置。
3)支援流水線任務失敗策略、失效等配置。

4.關鍵介面設計

1、釋出流水線介面
//建立釋出流水線
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)查詢:查詢釋出流水線例項的進度、狀態等
2、釋出定義介面
//建立釋出定義
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)查詢:
① 查詢釋出例項的進度、狀態等
② 查詢釋出環境例項的進度、狀態、日誌等
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.關鍵表設計

1、釋出流水線表
DevOps平臺之一鍵釋出設計
釋出流水線表關鍵欄位:
ENV_TYPE:環境型別,允許的部署環境型別設定,多個逗號分隔
2、釋出流水線和定義編排表
DevOps平臺之一鍵釋出設計

釋出流水線和定義編排表關鍵欄位:

1)RELEASE_DEFINITION_ID:子專案的釋出定義ID

2)PRE_RELEASE_DEFINITIONS:前續釋出定義ID列表,多個逗號分隔

3)EXTEND:擴充套件資訊,一般用於前端顯示佈局位置資訊

3、釋出流水線例項表

DevOps平臺之一鍵釋出設計
釋出流水線和定義編排表關鍵欄位:
1)RELEASE_DEFINITION_IDS:選擇的釋出定義ID列表,多個逗號分隔
2)INSTANCE_STATUS:例項狀態,成功,失敗,釋出中
3)BEGIN_TIME:釋出開始時間
4)END_TIME:釋出結束時間
5)ESTIMATED_DURATION:預估持續時間,用於計算進度
6)DURATION:實際持續時間
其他例項表(釋出例項表、釋出環境例項表、引擎流水線例項表、引擎流水線任務例項表)欄位類似
4、釋出定義表
DevOps平臺之一鍵釋出設計

5、釋出環境表

DevOps平臺之一鍵釋出設計

釋出環境表關鍵欄位:

1)PRE_RELEASE_ENVS:前續釋出環境ID列表,多個逗號分隔
2)ENV_TYPE:環境型別,部署目標的環境型別設定,多個逗號分隔
3)ENGINE_PIPELINE_ID:引擎流水線ID

6、引擎流水線表

DevOps平臺之一鍵釋出設計

引擎流水線表關鍵欄位:

1)STAGE_IDS:流水線任務ID列表(包含任務順序),多個逗號分隔
2)ENGINE_ID:執行引擎ID,多個逗號分隔(多個時,選擇最空閒的引擎)
3)ENGINE_NODE:執行引擎節點
7、引擎流水線任務表

DevOps平臺之一鍵釋出設計

8、引擎流水線任務屬性表

DevOps平臺之一鍵釋出設計

6.總結

一鍵釋出涉及多專案的部署,在具體實現過程中涉及很多方面,比如構建、部署;有時候在某個環節,可能還需要定時,人工審批,許可權控制等,是一個很長且複雜的批處理過程。
一鍵釋出是多專案並行開發過程中,一起上線一定會遇到的場景,如果透過人工操作來實現(現在很多企業的現狀),對於上線的穩定性,效率都會有很大的不確定性,但是透過DevOps實現一鍵釋出,則會完全不同,能夠很容易的多次演練,避免人為的不確定性和效率低下的問題。所以,一鍵釋出是DevOps解決大型專案協同場景的一個關鍵核心能力。

精選提問:

問:為什麼要區分發布流水線和引擎流水線?能簡述一下引擎流水線的技術實現嗎?

答:釋出流水線,是專案群一鍵釋出的概念。引擎流水線是devops底層基礎實現,一個引擎流水線會生成一個jenkins job。

DevOps平臺之一鍵釋出設計

關於作者飛白,現任普元軟體產品部資深開發工程師,畢業於大連民族大學,長期致力於IT技術研究、產品設計與開發等工作,擅長CI/CD、微服務、雲端計算等領域技術。負責EOS產品後端設計開發工作;負責DevOps產品後端設計開發工作。

關於EAWorld:微服務,DevOps,資料治理,移動架構原創技術分享。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562043/viewspace-2667845/,如需轉載,請註明出處,否則將追究法律責任。

相關文章