天天看点

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

##

继续阅读