Linux/C-C++ 後臺持續整合
Linux/C-C++ 後臺持續整合
方案實現
基於 "jenkins + 核心服務程式" 的後臺持續整合實現
目前,只包括編譯和釋出流程,諸如自動化測試之類的流程,尚未具備條件
核心點:1.抽象開發一塊通用的後臺核心服務程式(用c++實現),承擔編譯、釋出、結果分析、資訊輸出、資訊記錄等工作
2.維護一組配置表,用於配置程式的編譯、釋出引數
優勢:1. 極大減輕了jenkins shell指令碼編寫工作,簡化了jenkins配置,提高易用性
2. 支援遠端編譯(即在jenkins部署之外的主機進行編譯工作)
3. 關係型資料表記錄每次編譯釋出結果日誌,便於後續分析
不足:1. 流程固定,不支援隨意拆分組合流程
2. 原始碼以全量的形式釋出,不支援增量釋出原始碼
延伸方向:1.程式版本管控,版本切換,版本回退流程開發
2.自動化測試模組開發整合
3.基於增量釋出、增量編譯等方面的效率優化
後臺核心服務程式實現
主要模組:配置載入模組(loader -- CLoader)
負責從資料庫配置表載入相關編譯釋出配置資訊
編譯模組(compiler -- CCompiler)
負責構建編譯全流程指令碼、執行編譯全流程指令碼、分析編譯結果
釋出模組(deployer -- CDeployer / CMulDeployer)
CDeployer負責構建釋出全流程指令碼、執行釋出全流程指令碼、分析釋出結果
CMulDeployer負責並行釋出到多臺目標主機
記錄持久化模組(recorder -- CRecorder)
負責將持續整合彙總結果持久化記錄入資料庫記錄表
基本流程線: 載入配置 --> 編譯全流程 --> 並行釋出全流程 --> 結果記錄持久化
名詞解釋:
a. 全流程指令碼:編譯或釋出環節,整個流程的無互動shell操作全部封裝在一個主expect指令碼中
b. 並行釋出:編譯完成之後,目標程式多執行緒並行釋出到多臺目標主機
編譯流程節點定義:
正常流程節點 | 錯誤流程節點 |
1:ssh登陸編譯主機成功 | -1:ssh登陸編譯主機失敗 編譯流程exit |
2:編譯主機原始碼目錄檢查、原始碼備份、歷史原始碼清理成功 | -2:編譯主機原始碼目錄檢查、原始碼備份、歷史原始碼清理失敗 編譯流程exit |
3:scp原始碼資料夾到編譯主機成功 | -3:scp原始碼資料夾到編譯主機失敗 編譯流程exit |
4:執行編譯成功 | -4:執行編譯失敗 編譯流程exit |
釋出流程節點定義:
正常流程節點 | 錯誤流程節點 |
1:ssh登陸釋出主機成功 | -1:ssh登陸釋出主機失敗 釋出流程exit |
2:釋出主機發布前處理成功 | -2:釋出主機發布前處理失敗 釋出流程exit |
3:釋出主機發布目錄檢查、程式備份、歷史程式清理成功 | -3:釋出主機發布目錄檢查、程式備份、歷史程式清理失敗 釋出流程exit |
4:執行原始碼釋出成功 | -4:執行原始碼釋出失敗 釋出流程exit |
5:執行可執行程式釋出成功 | -5:執行可執行程式釋出失敗 釋出流程exit |
6:釋出主機發布後處理成功 | -6:釋出主機發布後處理失敗 釋出流程exit |
特殊流程節點定義: 0 -- 流程執行到最後
抽象定義流程節點的目的:
1.便於分析編譯、釋出結果,分析整個流程執行結果 -->
2.反饋給jenkins任務成功與否
3.反饋給jenkins任務執行結果
4.持久任務結果到記錄表
核心服務程式目錄結構:
核心服務程式執行配置檔案:
編碼字符集:utf8 程式原始碼、配置檔案、資料庫表、jenkins環境統一使用utf8編碼
引數配置表和日誌記錄表:
i_app_program_group_test 程式組配置表
i_app_compile_info_base_test 編譯基礎配置表
i_app_deploy_info_base_test 釋出基礎配置表
i_app_deploy_info_extra_test 釋出附加配置表
i_app_module_info_test 程式模組配置表
一個程式可以包括多個模組,一個模組下,如果deploy_url、deploy_path有多個,用“;”間隔,且兩者一一對應
i_app_host_info_test 主機資訊配置表
i_app_integrat_log_test 持續整合日誌記錄表
注意,表明測試環境以test結尾,生產環境以online結尾
jenkins承擔的角色
1. 任務建立、任務管理、任務排程
2. svn原始碼下載(update)
3. 呼叫後臺核心服務程式
4. 捕獲後臺核心服務程式過程輸出資訊並記錄過程日誌
5. 展示任務執行狀態、執行結果
jenkins呼叫後臺核心服務程式的實現
其中,後臺核心服務程式引數說明:
引數1:程式名 - 配置表裡全域性唯一,配置表程式名、jenkins任務名、編譯釋出主機原始碼資料夾統一
引數2:任務型別 - program
引數3:任務執行環境 - 測試環境為test,生產環境為online
或or
引數1:程式組名 - 配置表程式組名下邊包含具體程式集合,所以此種方式會序列執行該組下面所有程式的持續整合任務
引數2:任務型別 - group
引數3:任務執行環境 - 測試環境為test,生產環境為online
從這裡可以直觀地看出,極大降低了jenkins中shell指令碼的配置複雜度。
##原始碼
https://github.com/fflyingfree/CJenkins.git
##