天天看點

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.持久任務結果到記錄表

核心服務程式目錄結構:

Linux/C-C++ 背景持續內建

核心服務程式運作配置檔案:

Linux/C-C++ 背景持續內建

編碼字元集:utf8    程式源碼、配置檔案、資料庫表、jenkins環境統一使用utf8編碼

參數配置表和日志記錄表:

i_app_program_group_test  程式組配置表

Linux/C-C++ 背景持續內建

i_app_compile_info_base_test  編譯基礎配置表

Linux/C-C++ 背景持續內建

i_app_deploy_info_base_test  釋出基礎配置表

Linux/C-C++ 背景持續內建

i_app_deploy_info_extra_test  釋出附加配置表

Linux/C-C++ 背景持續內建

i_app_module_info_test  程式子產品配置表

Linux/C-C++ 背景持續內建

一個程式可以包括多個子產品,一個子產品下,如果deploy_url、deploy_path有多個,用“;”間隔,且兩者一一對應

i_app_host_info_test  主機資訊配置表

Linux/C-C++ 背景持續內建

i_app_integrat_log_test  持續內建日志記錄表

Linux/C-C++ 背景持續內建

注意,表明測試環境以test結尾,生産環境以online結尾

jenkins承擔的角色

1. 任務建立、任務管理、任務排程

2. svn源碼下載下傳(update)

3. 調用背景核心服務程式

4. 捕獲背景核心服務程式過程輸出資訊并記錄過程日志

5. 展示任務執行狀态、執行結果

jenkins調用背景核心服務程式的實作

Linux/C-C++ 背景持續內建

其中,背景核心服務程式參數說明:

    參數1:程式名 - 配置表裡全局唯一,配置表程式名、jenkins任務名、編譯釋出主機源碼檔案夾統一

    參數2:任務類型 - program

    參數3:任務運作環境 - 測試環境為test,生産環境為online

        或or

    參數1:程式組名 - 配置表程式組名下邊包含具體程式集合,是以此種方式會串行執行該組下面所有程式的持續內建任務

    參數2:任務類型 - group

    參數3:任務運作環境 - 測試環境為test,生産環境為online

從這裡可以直覺地看出,極大降低了jenkins中shell腳本的配置複雜度。

##源碼

https://github.com/fflyingfree/CJenkins.git

##

繼續閱讀