基于Jenkins的嵌入式软件持续集成方法
嵌入式软件就是嵌入在硬件中的操作系统和开发工具软件,它在产业中的关联关系体现为:芯片设计制造→嵌入式系统软件→嵌入式电子设备开发、制造。
嵌入式软件与嵌入式系统是密不可分的,嵌入式系统一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序4个部分组成,用于实现对其他设备的控制、监视或管理等功能。嵌入式软件就是基于嵌入式系统设计的软件,它也是计算机软件的一种,同样由程序及其文档组成,是嵌入式系统的重要组成部分。
持续集成起源于极限编程开发方法,是MartinFowler和MatthewFoemmel于2000年提出的一项软件开发实践。简单来说持续集成是指开发团队中的每个成员都尽量频繁的把工作提交到版本库,构建服务器自动将新提交的代码与原有资源构建成一个新版本,通过测试来验证新提交的代码有没有对项目造成破坏。
文中基于Jenkins,一种持续集成工具,通过配置Jenkins、自动化测试工具、版本控制软件和测试报告插件,实现了嵌入式软件持续集成的闭环测试过程。当检测到版本库有变化时,工具会自动下载测试版本库中的程序,如果发现问题,则立刻通知开发人员。本方案不仅能够密切监视代码库的正确性,包括代码质量和覆盖率;而且可以在无人值守的情况下自动完成预先设定好的测试任务,完成重复的测试过程,通过提供更快地识别和修复集成以及回归相关问题,达到更平滑、更快交付和更少问题的效果。
文中主要采用Docker+Jenkins+GIT+CSS+SkyEye组成持续集成系统。其中Docker 是一个开源的应用容器引擎,Jenkins为持续集成服务器(CI server);GIT为开源的源代码管理工具,保存源代码和变更记录;CCS为软件开发环境,提供编译环境;SkyEye为一款专业测试软件,支持包括测试用例加载调用、覆盖率统计和源码调试等功能。
配置环境:
1、首先配置Docker服务器,Docker内创建Jenkins镜像。
▲图1 Docker中Jenkins进程管理
2、windows下安装SkyEye
▲图2 SkyEyeGUI可视化界面
3、windows下安装CCS
▲图3 CCS可视化界面
持续集成基本实现过程如图4所示,主要包括代码提交、创建项目、构建、测试和测试结果反馈,具体步骤如下:
▲图4 持续集成流程图
(1)开发人员A与B分别负责同一项目的不同模块开发,假设这些模块之间存在接口关系。当完成接口设计和基础逻辑,具备集成测试条件时,提交到源代码管理库。同时,提前在测试环境下编写集成测试用例,直到测试用例能够覆盖所有需求;
(2)将被测软件提交到“源代码管理库”。Git将记录当前提交的版本和修改时间等情况,后续的新增模块和变更都在此基础上不断纳入Git进行管理;
(3)“创建项目”是在Jenkins中创建项目空间,和进行基本信息设置的过程,例如:源代码版本库的链接、轮询周期、触发构建条件等;
(4)当Jenkins轮询发现源代码管理库发生改变时触发“构建”过程,检查被测代码在开发环境下是否能够通过编译,如果有错误则通知开发人员,并停止测试。测试之前的编译检查,是执行测试的基本进入条件;
(5)在“自动化测试”阶段,使用SkyEye编写好的测试工程进行自动化测试;
(6)测试完成后,以电子邮件形式“通知”开发人员测试结论。默认情况下,Jenkins为每个失败和不稳定的构建发送一封电子邮件。
Jenkins项目配置过程源代码管理库Git作为版本控制工具,项目开发人员提交代码到版本库git,可通过配置Jenkins触发条件,设置定时检查版本库更新情况,或者设置git钩子post-commit,当版本库有代码更新时,Jenkins自动下载最新代码到工作空间。
1、工程定时管理
Jenkins周期轮询使用了cron风格语法,包括5个由空格分隔的字段:在本方案中要求凌晨进行工作,方便工程师第二天早上能看到测试结果。
▲图5 Jenkins中定时机制管理
2、Jenkins节点管理
Jenkins与SkyEye、CCS互通通过Jenkins slave进行管理.
▲图6 Jenkins中节点管理
3、编译
构建将开发完成的嵌入式子系统代码导入工作空间,使用CCS编译器,对工程进行编译,编译过程在makefile中实现。在构建脚本中进行判断编译是否成功,当编译发生错误时终止测试;反之,继续执行集成测试。下图是使用python对DSP工程源码进行导入、编译。
▲图7 python实行编译方法
4、自动化测试
自动化测试当工程构建通过后,启动软件测试工具SkyEye对代码进行测试,由于该软件支持命令行及python脚本操作,因此可以通过脚本的方式调用预先设计好的测试工程。在测试用例执行过程中,如果发生错误,可查看Jenkins控制台,或者将控制台信息作为日志导出查看。
▲图8 SkyEye中测试工程
5、测试报告
测试结束后,Jenkins输出测试结果趋势图,显示测试用例总数和失败用例数,并可查看控制台打印信息。为了方便查看详细的测试信息,本方案使用自行开发的插件,提取SkyEye生成的测试报告内容,测试人员能够在Jenkins中查看测试结果见图9。报告中列出了被测项目里每个代码文件的错误和位置。
▲图9 测试结果
6、通知
持续集成系统的另一个主要优势在于能够快速向开发者提供测试反馈信息。一般情况下,测试过程是定时触发且无人值守的,那么就需要测试系统在执行时,
及时记录测试过程,执行完毕后,迅速反馈测试结果。Jenkins提供了Email服务,能发送到全员。
▲图10 邮件发送通知
基于Jenkins的嵌入式软件持续集成方法相关推荐
- 基于 Jenkins 快速搭建持续集成环境--转
源地址:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/ 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础 ...
- 基于 Jenkins 快速搭建持续集成环境
持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域 ...
- 基于Jenkins 快速搭建持续集成环境
2019独角兽企业重金招聘Python工程师标准>>> 持续集成概述 什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开 ...
- 构建基于Jenkins + Github的持续集成环境
登录 | 注册 John_cdy的专栏 学无止境 目录视图 摘要视图 订阅 有奖征资源,博文分享有内涵 6月推荐文章汇总 CSDN博文大赛初赛晋级名单公布 关注CSDN社区微信,福利多多 构建基于Je ...
- 基于Jenkins快速搭建持续集成环境
看了园友张善友的博文,尝试成功.便有此作.原网址: 基于 Jenkins 快速搭建持续集成环境 天下事有难易乎?为之,则难者亦易矣:不为,则易者亦难矣. 首先要学会使用MSBuild构建脚本 附网址: ...
- 基于Jenkins搭建iOS持续集成开发环境
原创 2017-03-06 关键点 Jenkins安装及配置 Pipeline创建及配置 ruby的版本管理工具rbenv安装 fastlane安装 常见构建问题 相关工具及技术网站推荐 CI持续集成 ...
- Linux上快速搭建Jenkins服务器 实现持续集成开发
http://my.oschina.net/long0419/blog/183299 简介: 持续集成是一种软件开发实践,对于提高软件开发效率并保障软件开发质量提供了理论基础.Jenkins 是一个开 ...
- 【Jenkins+RF】从零搭建Jenkins+Robot Framework持续集成环境
转自:https://www.jianshu.com/p/ef8d3109ac5f 感恩 安装Jenkins 系统环境:CentOS Linux release 7.3.1611 x86_64 ...
- Jenkins——Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包)
Jenkins--Jenkins介绍+基于云平台的Jenkins安装和持续集成环境配置(插件+用户权限+凭据+Maven打包) 持续集成及Jenkins介绍 软件开发生命周期 什么是持续集成? 持续集 ...
最新文章
- 14.QueuedConnection和BlockingQueuedConnection连接方式源码分析
- 放弃OpenStack?恐怕还不到时候
- IE6、IE7、Firefox无提示关闭窗口的代码
- mysql数据库-1.文件导入mysql表secure_file_priv报错问题解决 mysql select outfile不能导出亲测
- python中cgi到底是什么_什么是CGI?详细介绍Python CGI编程
- c语言for循环运行格式,关于for循环的格式
- OpenFOAM中:点,线,面,体的概念区别(尤其是face和patch的区别)
- 3ds Max 2018 在安装后无法启动或出现不稳定
- dotnet core webapi +vue 搭建前后端完全分离web架构(一)
- [原创]Enterprise Architecture V7.5 C++代码生成时,头文件中函数声明没有注释,CPP中函数定义却有注释。...
- 让VirtualBox虚拟机实现开机自动后台运行
- c语言中转义字符 0,【填空题】在C语言中,用“\\”开头的字符序列称为转义字符, 转义字符‘\\n’的功能是_____; 转义字符‘\\0’的功能是_____;...
- 升级Exchange server 2010 SP1至SP3版本相关问题解决方法
- 七周成为数据分析师—Excel实战篇
- linux创建自签名证书
- 堆内存和栈内存的区别
- linux实现进度条
- Elastic 7.13.0 版重磅发布:在 Elastic 上搜索和存储更多数据
- 从瑞银集团看客户导向型财富管理机构如何从资产配置服务中获利
- c-jdbc, sequoia, continuent, SymmetricDS
热门文章
- python的matplotlib的函数_在Python中使用matplotlib绘制条件函数
- led linux定时闪烁心跳,Linux驱动——LED闪烁
- 深度学习检测眼睛疾病
- python中函数包括参数函数吗_Python中的函数---函数的定义和参数
- div中的p标签于img设置同一水平_HTML网页制作常用标签及说明——前端开发入门...
- Linux 比特币Bitcoin采集节点搭建
- 干扰网络信号的app_解决家中WIFI信号无法全面覆盖的方法
- 华为Android10版怎么截屏,安卓手机截图方法 华为手机如何截图 - 云骑士一键重装系统...
- Android编程知识点3-Intent
- django文件上传,只上传一张