1. 程式人生 > >Linux/C-C++ 後臺持續整合

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

##