建立可持续集成系统(Jenkins)

在软件工程实践中,需要将开发完成的最终产品交付给用户(或发布给测试部门),就需要我们将源代码编译为可执行文件。将各个分别开发的模块集合为一个完整的系统,这个过程成为系统集成,我们用一个系统来描述这个集成过程。

集成系统:输入指定的软件资产,输出根据软件资产生产出的软件产品以及其他副产品的系统。

对于一般系统而言(以VC开发为例),软件的生产过程包括:源码获取,源码检查,源码编译,测试,部署。经历以上几个过程之后得到一个可用的系统。

故一般而言集成系统通常会按照顺序经历以下几个模块组成:

1. 版本检查:用于获取代码和其他必要的文件。

2. 源码检查:对于源代码的静态分析,检查可能存在的错误。

3. 源码编译:通过编译器和连接器编译源文件,生产可执行文件或库。

4. 测试:通过对编译出来的文件进行一定测试,并获得测试结果。

5. 部署:若测试通过则文件可以作为最终得到的产物用于交付。

在实践过程中软件的最终集成会存在各种各样的问题而导致集成失败,需要大量的修改和测试,而得到最终可以的交付的产品。故每次版本发布时的加班不可避免,而交付的延期也时常发生,软件的质量不可保证。为了解决这些问题或者说减少修复这些问题所需要付出的成本,我们尽量让这些问题提早发生(问题越早发生修复的代价越小)。因此我们可以以一定频率对工程的更改进行集成,若集成失败则尽早修复,以保证能够得到可交付的产品,这样的实践称为持续集成。

我们可以将系统集成的工作交由项目经理负责,让项目经理定期集成系统并发布版本,我们称之为人肉集成系统:

1. 版本检查:SVN或者Git工具能够check out出代码的工具都可以。

2. 源码检查:使用beyondcompare等工具对比原有版本,通过codereview的方式用肉眼对代码进行检查,好坏全凭项目经理的经验。

3. 源码编译:VS工程的生成功能,将源代码编译,连接,生成可执行文件或库。

4. 测试:跑完单元测试,对文件的功能进行测试,或检查是否功能完备或者bug是否已经得到修复。

5. 部署:将生成的文件打包交付。

人肉集成系统处理了集成最大的问题,通过项目经理以一定频率反复执行以上过程保证交付。但是项目经理的精力完全被消耗在这个重复劳动的过程中,而且质量保证完全取决于项目经理的经验和能力,并且不能量化结果对于决策的支持有限。以上几个模块会被按顺序重复执行,若有一定的工具可以自动完成以上模块的各个功能则可以将项目经理从繁复的重复劳动中解脱出来,大大的节省项目成本。故我们需要构建一个自动持续集成系统来取代人肉集成系统,感谢开源工具让我们能够使用自动化的工具完成以上各个模块的功能,并通过CI工具反复执行,自动集成系统同样包含一下模块:

1. 版本检查:SVN或者Git工具能够check out出代码的工具都可以。

2. 源码检查:使用cpplint检查代码规范,使用cppcheck静态检查代码缺陷,使用cppncss或SourceMonitor分析代码复杂度。

3. 源码编译:通过命令行调用VS工程的生成功能,将源代码编译,连接,生成可执行文件或库。

4. 测试:执行gtest和gmock进行单元测试和回归测试,通过opencppcoverage来检查代码覆盖率。

5. 部署:将生成的文件打包交付。

我们使用jenkins作为CI工具,来完成持续集成的各个模块的管理(jenkins的插件能够帮助我们完成以上工作)。

我们在windows7下构建CI服务器,并使用vs2013作为开发环境来完成一个CITest的持续构建活动。接下来使用CITest的编码来模拟日常的开发工作,并从开发人员与项目经理两个角色参与CI系统的搭建。

1. 使用VS2013新建C++工程CITest,并编写一些代码用于测试。

2. 选择代码仓库,Git不是很熟悉一直用subversion,而且资源有限并不想多架设一条svn的服务器而且作为一个test项目代码需要的空间有限,故选用免费的代码托管服务器(taocode),以此svn地址作为上传下载代码的地址,上传CITest工程代码和工程文件。

3. 将静态代码检查工具集成到VS上

推荐google的c++代码规范 (注释风格参考doxygen的格式),使用代码风格检查工具cpplint:

先安装python2.7,下载cpplint.py到目录C:\cpplint,打开vs,工具菜单,选择外部工具将cpplint添加进去,再通过工具.选项.键盘为cpplint分配快捷键

添加代码段保持注释的风格一致,工具代码段管理器,导入代码段定义文件,并在工具.选项.文本编辑器.c++.制表符中见制表符替换为两个空格:

安装完成后运行一次,修复报告的所有问题

再将静态分析工具cppcheck集成到vs上,与cpplint一样为cppcheck添加快捷键:

修改代码以使得通过检验。

使用SourceMonitor测量代码复杂度:

4. 用命令行编译VS工程

基于后期使用jenkins持续集成系统的考虑,这里使用ant,调用devenv命令来编译解决方案。

先安装ant,并配置环境变量,再配置devenv的环境变量,编写bulid.xml放到工程的根目录下,并作为项目资产加入svn,在工程目录下运行ant。

5. 为工程添加单元测试

感谢google提供的两个工具,使得完成单元测试的工作变得简单。在实际开发中需要采用测试驱动开发的实践:

我们下载gtest和gmock两个工具,然后根据被测试代码所在工程的运行库选项并编译他们:

创建一个空的工程用于单元测试,并将上一步生存的lib文件和头文件拷贝到单元测试工程目录下:

在工程文件中增加一个用于单元测试的配置,定义输出为lib文件,在单元测试的工程中包含他们,编写测试代码:

测试代码的编写参考网上的资料:主要有玩转google开元c++单元测试系统和GMockForDummies,cheat sheet,cookbook这几份资料。

在ant的bulid.xml文件中添加target,实现自动化

6.安装并使用opencppcoverage开查看测试代码的覆盖率

以上在开发端的设置全部完成,或者还有其他的需要补充的工具可以视具体项目再决定如何补充和添加。

接下来使用jenkins来搭建CI服务器,在客户端完成私有构建后将代码提交到svn上,CI服务器将执行以上所有的构建和测试动作,并将结果反馈给相关人员,构建失败应当是优先级最高的处理事件(在错误的基础上做的再多也是白费功夫)。

1.安装Jenkins和需要的插件

2.创建一个自由风格的项目,填写基本信息

2.定义构建动作并解析构建结果(使用以上与客户端相同的工具,并将构建结果解析出来)

cpplint(此处lint.py遍历当前目录,检查所有.h和.cpp文件,并将结果输出到xml文件中):

cppcheck:

SourceMonitor:

Ant(需要根目录下的build.xml文件支持)

opencppcoverage(在build.xml文件中去掉执行单元测试的部分内容,在此同时输出两个文件)

最后在配置邮件通知:

至此CI系统配置完成,返回上一级,点击立即构建(上边每一步每添加一个功能构建一次,直到这些功能配置完成):

时间: 2024-12-20 15:25:41

建立可持续集成系统(Jenkins)的相关文章

研发协同平台持续集成之Jenkins实践

导读 研发协同平台有两个核心目标,一是提高研发效率 ,二是提高研发质量,要实现这两个核心目标,实现持续集成是关键之一. 什么是持续集成 在<持续集成>一书中,对持续集成的定义如下:持续集成是一种软件开发实践.在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次.每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误.自从在团队中引入这样的实践之后,Martin Fowler发现这种方法可以显著减少集成引起的问题,并可以加快团队合作软件开发的速度. 1.集

老李分享:持续集成学好jenkins之内置命令

老李分享:持续集成学好jenkins之内置命令 Jenkins命令调用方式:调用Jenkins命令设置job的描述信息. $JAVA_BIN-jar "$JENKINS_CLI_JAR" -s "$JENKINS_URL"  set-build-description "${JOB_NAME}""${BUILD_NUMBER}" "$tag_name" --username "$SVN_USERN

老李分享:持续集成学好jenkins之Git和Maven配置

老李分享:持续集成学好jenkins之Git和Maven配置 Jenkins专用术语,请参考下面连接: https://wiki.jenkins-ci.org/display/JENKINS/Terminology 1.通过Jenkins web页面添加Git plugin Manage Jenkins->Manage Plugins->Available中选择Git Plugin安装, 注意要填写user name和 email地址,否则日后会碰到git tag的错误 2.Jenkins服务

使用Gradle构建构建一个Java Web工程及持续集成环境Jenkins配置

安装Eclipse插件——Buildship 什么是Buildship? Buildship能方便我们通过Eclipse IDE创建和导入Gradle工程,同时还能执行Gradle任务. Eclipse上安装Buildship 建议直接去Eclipse market处下载,简单方便,如下图: Buildship的更多信息 请参考以下链接,有教程,比较简单, 主要内容: 如何导入Gradle工程, 如何创建Gradle工程, 如何执行Gradle任务, 等... http://projects.e

持续集成系统思考记录

1.基于ansible tower来管理测试环境机器,使用zabbix或nagios来作为进程监控和rpm一致性检查:使用任务流增加配置中心的调用来同步部署测试环境:DB如何处理?如何区分环境? 2.缺乏发布效率的数量呈现.例如 提交->发布→快速验证(测试)→运行监测数据 总共的耗时要多久,我们可否逐步降低:目前的效率很慢.如要提高效率需要重构jatsci架构,优化编译.打包.部署流程:尤其是编译效率 3.运维同学已经开始慢慢支持制作镜像,基于镜像发布.持续集成系统要如何适应: 4.提交->

自动化测试项目持续集成到jenkins

之前项目将接口自动化项目持续集成到了jenkins上,这次专门写篇文章记录下. 持续集成时,主要分为以下几个步骤: 1. 服务器安装jdk:2.maven的安装及配置:3.git的安装及配置:4.jenkins的安装及运行:5.将接口自动化项目持续集成到jenkins:6.在线测试报告的产出 一.jdk安装 这个网上有很多教程,本文不再赘述. 二.maven的安装和配置 1. 下载压缩包,使用1.1或者1.2都可以: 1.1 通过自己的电脑将压缩包上传至服务器: a. 进入maven官网下载 b

持续集成基础-Jenkins(一)

什么是jenkins: Jenkins是持续集成的一个系统,它是一种软件开发实践活动(经常执行集成,可能每天) 持续集成的价值: 1.减少风险 - 能够尽早的发生问题 2.减少重复过程 - 把重复的东西都自动化起来 3.任何时间.任何地点生成可部署的软件 4.增强项目的可见性 5.建立团队对开发产品的信心 持续集成的要素: 1.统一的代码库 → 所有成员都往一个地方提交代码 2.自动构建 → 自动编译.部署.运行 3.自动测试 4.每个人每天都要向代码库主干提交代码 5.每次代码递交后都会在持续

给开发安装持续集成工具jenkins,K哥

2016.11.24 测试用服务器已经有了SVN 被开发找到说要安装一个正式的上线管理软件 我也没问他什么是正式的上线管理软件 自己百度没有,QQ群问,有人回复说可能是指持续集成工具 OK,搜索,发现jenkins这个软件不错,虽然官网不支持中文,但社区很活跃,可以用 官网:https://jenkins.io/index.html    自己根据系统下载 1.安装JDK jenkins软件需要java环境支持 先检查下有没有JAVA java --version OK,没装,网上下载个 htt

持续集成环境Jenkins的搭建和使用

这几天试着搭了个持续集成环境,我使用的是Jenkins,它的前身是Hadson,因为被Oracle收购了,所以换个名字继续开源,这个有点像MySQL. 持续集成总是跟敏捷开发什么的搞在一起,显得很高大上,其实它就是一个后台服务+web管理配置页面,它可以自动化(定时或事件触发)地执行某项任务,比如编译程序.打包程序.自动发布等等.这个在web开发或者大项目的多人合作上面很有帮助.只要配置好了,然后可以个人做个人的,Jenkins会自动的从svn或git上面获取最新的代码,整合编译发布.相当于主程