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