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
##