CI(continuous integration)持续集成

一次构建:可能包含编译,测试,审查和部署,以及其他一些事情,一次构建就是将源代码放在一起,并验证软件是否可以作为一个一致的单元运行的过程。可以理解为频繁的在多个团队的工作中集成,并且给与反馈的过程。团队开发成员经常集成它们的工作,每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

CI场景如下:

(1)开发人员向版本控制库提交代码,同时,集成构建计算机上的CI服务器正在轮询检查版本控制库中的变更

(2)在提交发生之后,CI服务器检测到版本控制库中发生了变更,所以CI服务器会从库中取得最新的代码副本,执行构建脚本,该脚本将对软件进行集成

(3)CI服务器向指定的项目成员发成电子邮件,提供构建结果的反馈信息。

(4)CI服务器继续轮询版本控制库中的变更。

CI持续集成周期

一个典型的持续集成周期包括以下几个步骤:

(1)持续集成服务器不断从版本控制服务器上检查代码状态,看代码是否有更新。

(2)如果发现代码有最新的提交,那么就从版本控制服务器下载最新的代码。

(3)等代码完全更新以后,调用自动化编译脚本,进行代码编译。

(4)运行所有的自动化测试。

(5)进行代码分析。

(6)产生可执行的软件,能够提供给测试人员进行测试。

CI系统

在CI中您需要一个版本控制库,比如(CVS或者SVN,subversion)来执行CI。版本控制库,大家都知道SVN,可以方便的管理源代码,可以沿着时间轴取得不同同版本的代码。CI服务器在变更提交到版本库后执行的集成构建,他会每个一段时间去检查版本库中的变更,所以我们需要对CI服务器进行配置。CI服务器还需要提供一个方便的显示板来显示构建的结果。但是CI服务器并不是必须的,也可以通过执行构建脚本来执行构建。

从上面我们知道CI的4个基本特征:与版本控制库链接,构建脚本,某种类型的反馈机制,集成源代码变更的过程。这也是CI系统的4个基本功能。一个好的CI系统的关键特征就是速度,这个系统的本质就及时向开发者和项目风险承担者提供反馈信息。

既然CI这么好,但还是有些团队并没有选择使用,其实这是一个综合考虑的结果。使用CI会增加一些成本的,比如增加了维护CI系统的开销,变化太多尤其是对于老项目需要改变很多才能实现CI。失败的构建太多,如果在提交代码之前没有私有构建一次,就会造成在使用ci的时候变更变得频繁。存在额外的硬件和软件成本,使用ci就需要一台独立的集成服务器。

一些需要考虑到的问题

测试能达到多少代码覆盖率?

执行构建需要多长的时间?

平均的代码复杂度如何?有多少代码重复?

在版本控制系统中对构建版本打上标签了吗?

已部署的软件存放在哪里?

是否使用测试覆盖率工具?

如何做好code review?

CI工具

持续集成工具:jenkins、CruiseControl、Hudson、gauntlet

构建工具:Maven、Ant、groovy

CDBI:持续数据库集成,即每次项目的版本控制库中发生变更时,重建数据库和测试数据。

Jenkins

Jenkins 是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。同时 Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。Jenkins 还提供了非常丰富的插件支持,这使得 Jenkins 变得越来越强大。我们可以方便的安装各种第三方插件,从而方便快捷的集成第三方的应用。

PMD

静态代码分析工具,通过扫描Java源代码,发现隐藏在其中的各种问题,包括重复代码,日志记录不规范,异常处理不规范,未使用引入的包,支持ant集成。

这里有关于PMD的一些介绍:http://blog.csdn.net/sadamdiyi/article/details/6073694

Checkstyle

提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程。相比于PMD会更加侧重于编码标准(语法)方面的检查,而PMD是侧重于语义bug。

基于Jenkins快速搭建CI环境

首先要知道一个持续集成环境需要包括三个方面要素:代码存储库构建过程持续集成服务器

​代码存储库一般使用SVN,

1、开始新建一个 Jenkins 项目, 由于我们需要连接 SVN 的代码存储器, 我们选择 Build a free-style software project。

2、然后配置这个 JenkinsTest 项目了,根据实际的 SVN 服务器服务器信息配置 Source Code Management,这能让 Jenkins 知道如何从哪里获取最新的代码。

3、根据开发需要,隔一段时间需要重新构建一次。选择 Build periodically,在 Schedule 中填写 0 * * * *对应的构建时间。

4、添加 build 的步骤了。Jenkins 提供了四个选项供我们选择,可以根据需要执行或调用外部命令和脚本,例如ant、shell、maven等等。这些脚本都是根据需要自己配置的。

5、可以在 Jenkins 中观察构建的进度和最终的状态——成功或者失败。太阳代表之前的构建没有任何失败,蓝色的小球代表构建成功。也可以在JenkinsTest 查看单次构建的 Console 的输出结果。从中能看到构建的第一步是从 SVN 服务器上 check out 代码,然后在build。

具体的可以参考:http://www.ibm.com/developerworks/cn/java/j-lo-jenkins/

后话:其实这就是我在公司实习时所谓的CBD,他们没有使用集成工具,而是直接在服务器上执行CBD脚本,check代码,build构建,deploy部署。

基于Jenkins的持续集成CI的更多相关文章

  1. 【转】基于Jenkins实现持续集成【持续更新中】

    知识预览 持续集成 Jenkins安装 Jenkins插件 Jenkins配置 Jenkins备份与恢复 发布PHP项目 SVN 发布Maven项目 按版本发布 远程管理 War文件部署设置 任务 J ...

  2. 基于Jenkins实现持续集成【持续更新中】

    持续集成 1.什么是持续集成:Continuous integration (CI)持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生 ...

  3. 第4次作业 -- 基于Jenkins的持续集成

    Jenkins 配置使用心得 先在 https://jenkins.io/download/ 下载Jenkins 下载之后安装,在指定的地方找到了初始密码,安装了一些插件之后,Jenkins就可以使用 ...

  4. 使用Jenkins搭建持续集成(CI)环境

    转自:http://www.cnitblog.com/luckydmz/archive/2012/01/03/77007.html 首先从官网http://jenkins-ci.org/下载 Java ...

  5. [转]使用Jenkins搭建持续集成(CI)环境

    转自:魔のkyo的工作室 首先从官网http://jenkins-ci.org/下载 Java Web Archive (.war) 例如我保存到 D:\jenkins\jenkins.war 运行J ...

  6. Jenkins: 使用Jenkins搭建持续集成(CI)环境

    http://www.cnitblog.com/luckydmz/archive/2012/01/03/77007.html 首先从官网http://jenkins-ci.org/下载 Java We ...

  7. 基于 Jenkins 构建持续集成任务

    1.1 Jenkins 配置使用心得 我是在windows10上安装的,安装过程很简单,从官网上下载下来msi安装包,双击执行就好了.安装程序完成后会自动打开http://localhost:8080 ...

  8. Jenkins+Gitlab搭建持续集成(CI)环境

    利用Jenkins+Gitlab搭建持续集成(CI)环境 Permalink: 2013-09-08 22:04:00 by hyhx2008in intern tags: jenkins gitla ...

  9. CentOS 7 部署Gitlab+Jenkins持续集成(CI)环境

    持续集成概述及运行流程 : 持续集成概述 :持续集成(Continuous integration)持续集成是指开发者在代码的开发过程中 ,可以频繁的将代码部署集成到主干,并进行自动化测试  开发→代 ...

随机推荐

  1. Python 常用PEP8规范

    目录 目录 代码布局 缩进 最大行宽 空行 模块导入 字符串 表达式和语句中的空格 注释 命名规则 编程建议 代码布局 缩进 每级缩进用4个空格. 括号中使用垂直隐式缩进或使用悬挂缩进. EXAMPL ...

  2. javascript的面向对象思想知识要点

    获取数据类型 typeof undefined:访问某个不存在的或未经赋值的变量时就会得到一个 undefined,用typeof 获取类型,得到的也是undefined;null:它不能通过java ...

  3. ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕.届时,旷视首席科学家孙 ...

  4. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #21FUSE

    HACK #21FUSE 本节将介绍使用用户进程的文件系统框架—FUSE.FUSE概要FUSE(Filesystem in Userspace,用户空间文件系统),是用来生成用户空间的一般进程的框架. ...

  5. solr联合多个字段进行检索(multivalued和copyfield的使用)

    在实际工作中不仅仅对索引中的单个字段进行搜索.需要进行综合查询. 比如book表中有id,name(标题),price,summary(摘要),content(内容),我们要找一本书的时候,查询关键字 ...

  6. Jenkins邮件扩展(Email Extension插件 Windows环境)

    1.Jenkins ver. 2.107.3版本自带Email Extension插件启动后即可看到系统设置里的 Extended E-mail Notification ,如果没有请安装 2.安装过 ...

  7. 2. select下拉框获取选中的值

    1.获取select选中的value值: $("#select1ID").find("option:selected").val();  --select1ID ...

  8. JS 报表制作

    1:Echarts, 界面多样化. http://echarts.baidu.com/index.html 2: Jmgraph 工具 简单的画线工具 http://graph.jm47.com/ 3 ...

  9. POST方式"Content-type"是"application/x-www-form-urlencoded 的请求遇到的问题

    Content-type的方式:application/x-javascript text/xml->xml数据 application/x-javascript->json对象 appl ...

  10. OPTION SQL_SELECT_LIMIT=DEFAULT'

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version ...