APP下载

一种全面流畅整洁的Jenkins每日构建设计与实现

2017-11-20徐晓平

电脑知识与技术 2017年25期
关键词:全面

徐晓平

摘要:由于具有集成作用和暴露问题及时的优点,Jenkins每日构建越来越广泛的被应用于软件项目开发中。然而Jenkins每日构建系统易存在不全面、不流畅和不整洁的问题,具体地说,上述三个问题在构建内容、构建过程和构建报告中均可能出现。该文提出每日构建应追求全面、流畅和整洁的思想,并提出一种在内容、过程和报告三个方面均全面、流畅和整洁的构建系统设计和实现。

关键词:全面;流畅;整洁;每日构建;Jenkins

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)25-0222-02

1 概述

有人把每日构建比作是项目的心跳,更确切的说法是项目中同步跳动的脉搏[1]。微软推出每日构建并从中受益以后,越来越多的软件项目开始着手每日构建过程的研究和实施。然而当很多开发者进行實施每日构建的过程时,却碰到了各种各样的问题,在实际实施每日构建过程并非理想中的顺利[2]。

提到每日构建,就不可避免的会将它与持续集成联系起来。而且随着软件开发中的应用需求变化越来越频繁,变化速度越来越快,敏捷开发方法应运而生,持续集成作为每日构建的衍生正是其不可缺少的组成部分[3]。然而,相对于持续集成而言,每日构建拥有的时间窗口更长,可以加入更多活动,会比持续集成更全面。另外,每日构建一般都是在下班后的晚间进行,能更充分的利用资源,提高测试的效率,加快软件的开发速度[4]。因此,持续集成并不能在所有软件开发项目中代替每日构建,相反的是,每日构建是一种比持续集成更适用的实践。

2 每日构建追求目标

全面、流畅和整洁是每日构建自身属性所决定应该追求的目标。每日构建的时间窗口一般都会比较长,典型的构建是晚上10点一直到第二天早上的9点[5],也可以根据需要延长时间,可以进行大型构建,因此在构建上有做到全面的条件。每日构建是为敏捷开发服务的,保证团队的敏捷性就是保证开发的流畅性,而保证每日构建的流畅性是保证敏捷开发流畅性的关键[6]。流畅性不仅需要体现在代码集成编译和测试等构建功能上,更要在内容、过程和报告三方面均有体现。整洁也应该是每日构建所追求的,整洁的每日构建系统可以加快软件开发人员定位编译、测试或者其他问题的速度。

3 系统方案设计与实现

3.1 概述

本系统的目的是以开源的Jenkins为平台,以一台Windows7操作系统的PC机为承载,对3GPP LTE终端中某协议的软件开发进行每日构建,由此可见,此系统还具有经济性的特点。此终端协议是多模块性质的协议,对应的代码也是分模块的,不同的开发人员负责不同的模块。

3.2 方案设计

3.2.1 系统架构

此系统有三个组成部分:Windows7操作系统定时任务,Jenkins构建执行和邮件发送。Windows7定时任务的作用是每天启动Jenkins服务器和执行每日构建中某些内容需要的软件。此PC机在使用中不仅用做在晚上执行每日构建,在白天也做其他作用,Jenkins服务可能会在白天被误关,因此利用定时任务来保证Jenkins的打开。打开执行每日构建中某些内容需要的软件也可以在Jenkins里实现,但是Jenkins的功能就不专一。在构建过程中使用定时任务中途干预可以解决Job超时导致构建报告不准确的问题。Jenkins部分即时对各个模块的代码进行每日构建。邮件发送部分使用邮件自动发送软件将每日构建的结果发送出去,在Jenkins中的所有任务均结束时将报告通过SVN提交,邮件自动发送软件检测到提交后发送报告。本流程包括构建前的准备工作、正式构建和构建完发送结果,具有全面、流畅和整洁的特点。

3.2.2 构建内容组成

此系统对3GPP LTE终端中某部分协议的代码进行构建的内容有编译、Pclint检查、Logiscope检查、单元/覆盖测试、集成测试和报告生成。

由于此部分协议代码需要依赖其他代码才能编译成可执行版本,同时为了避免其他代码对此部分协议代码的影响,在编译之前仅对这部分代码进行SCM更新。Pclint是C/C++软件代码静态检查分析工具,可以检查出编译器无法发现的潜在错误[7],对于稳定性要求高的代码更应该使用Pclint。Logiscope可用于检查代码的可维护性和可读性[8],这对于处于维护工作占较大比例阶段的协议代码有重要作用。同时,由于敏捷强调开发人员应在软件生产的所有过程中发挥作用,因此各个开发人员需要对各个模块的代码均有所了解甚至掌握。单元测试具有规模小、复杂性低和可以平行展开、多人同时测试等优点,因此需要将单元测试加入到每日构建中去。覆盖测试也称代码覆盖率检查,是衡量测试质量的一个重要指标,虽然不应该过分追求覆盖率,但是合理程度的覆盖率是对代码质量的保证。集成测试是在单元测试的基础上将所有模块组装成一个子系统或者系统进行测试。

对于上述的构建内容,组成全面,涉及软件开发的全过称,可以有效保证软件质量。同时各个组成功能独立互不干扰,有利于提高构建执行流畅性。在整洁性方面,各个组成分工明确,不重叠,不交叉。

3.2.3 构建流程

构建流程,从全面性的角度看,要保证构建内容全部被执行到;从流畅性的角度看,要确保即使前一个元素执行失败或者执行超时甚至被系统挂起也不影响下一个元素的执行,这里采用多Job方式,同时在不影响整体构建的前提下将容易执行失败或者执行超时甚至是被系统挂起的Job或者Task放在后面执行;从整洁性的角度看,过程要简单,要方便故障定位,功能类似的内容作为多个Task尽量集中在一个Job里。构建内容被分成了3个Job,Job1包含编译、Pclint检查、Logiscope检查和单元/覆盖测试等4个Task,Job2包含3个模块的集成测试等3个Task,Job3包含报告生成。在Job1和Job2中,后一个Task开始之前均定时强制关闭前一个Task的线程,目的是保障后一个Task不因前一个Task线程被挂住。endprint

3.2.4 构建报告

构建报告要全面反映构建结果,不仅可以反馈构建成功时的结果也要能反馈构建失败时的信息。在流畅性方面,生成报告时不能因为某个Job或者Task执行时出错或者超时导致信息缺失或者没有输出就停止而不生成这个或者后面的Job或者Task的报告。报告采用表格形式,直观、整洁。

3.3 系统实现

3.3.1 定时任务

在定时任务中,采用windows command批处理脚本实现启动Jenkins服务,启动过程如下:step1,进入到Jenkins的war包所在的目錄;step2,java —jar jenkins.war —httpPort=8080。如正常启动,在命令窗口中会显示“Jenkins is fully up and running”。

在集成测试中,需要对模块x、模块y和模块z三个模块进行集成测试,而且每个模块的集成测试都可能会发生超时。假设集成测试的先后顺序是x、y和z,在某一次构建中模块x的集成测试超时了,导致在当天的构建报告发送出去之后才开始执行y和z的集成测试,那么y和z的集成测试报告是上一次构建的结果。在发生Job超时的情况下需要停止以便构建后面的Job,本文使用开源的python-jenkins接口来定时停止Job。

3.3.2 构建执行

整个构建过程被分为3个Job,这3个Job均采用windows command脚本实现调用。Job1包含4个批处理bat,分别调用编译、pclint检查、单元测试/覆盖率测试和Logiscope检查。由于Logiscope检查部分易于崩溃,所以将此Task排到所属Job的末尾。Job2实现3个模块的集成测试,在每个模块的集成测试中,首先要编译用例,然后执行,每个模块用例的编译和执行各自用一个bat来调用。Job3先使用bat脚本从构建日志中提取数据,再利用vbs脚本将构建结果填充到html格式的报告模板中。在实现中,使用容错处理增强报告生成的流畅性,例如,在读取某个文件内容之前不仅先判断该文件是否存在还判断文件中是否有内容。

3.3.3 邮件发送

报告生成以后,通过svn commit+blat方式发送报告,批处理命令如下:blat “每日构建.html” —to “邮箱地址1”-subject “每日构建_xx年xx月xx日” —server “smtp.邮箱服务器地址” —u “邮箱地址2”-pw “密码”,其中,”邮箱地址1”为收件人邮箱,”邮件地址2”为发件人邮箱,”密码”为发件人邮箱密码。

4 结束语

每日构建具有很强的实用性,特别在机器资源紧张时更能体现每日构建的价值。同时,在内容、执行和报告上均做到全面、流畅和整洁的每日构建会在保证软件质量方面起到重要作用。本文提出的方案与设计在时间上具有较强的普遍适用性,其思想也具有较强的指导意义。

参考文献:

[1] 苟振兴. 把握项目的脉搏[J]. 程序员, 2004(6):57-60.

[2] 鄢彪, 吴克河. 每日构建之装配[J]. 程序员, 2005(4):64-67.

[3] 王宁. 基于Jenkins的持续集成系统的设计与实现[D]. 北京邮电大学, 2014.

[4] 孙凌云. 基于Daily Build的软件自动化测试系统的研究与实现[D]. 西安电子科技大学, 2014.

[5] 周莹, 欧中红, 李俊等. 基于Jenkins的持续集成自动部署研究[J]. 计算机与数字工程, 2016(2):267-270.

[6] Richard Sun. 持续性构建[J]. 程序员, 2007(8).

[7] Pclint [EB/OL].http://baike.baidu.com.

[8] Logiscope [EB/OL].http://baike.baidu.com.endprint

猜你喜欢

全面
全面互动式教学模式的应用与思考
全面风险管理在企业管理中的应用研究
关注思维,强化思辨