求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
     
   
分享到
持续集成
 
作者 dananhai381,火龙果软件    发布于 2013-11-13
 

持续集成:采用条件触发、定时等方式,自动化实现代码的管理、编译、测试、发布等工作

主要功能

源码管理

持续集成:定时或条件触发

自动构建:编译、单元测试、集成测试、打包

通知机制:多种方式,如e-mail IM RSS

丰富的报告:javadoc, 测试,代码质量等

web页面:一个良好的UI

强大的扩展机制:插件

原则

业界普遍认同的持续集成的原则包括:

1)需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有 IBM Rational ClearCase、CVS、Subversion 等;

2)开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;

3)需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;

4)必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建。

组成内容

自动构建工具 : maven

代码存储库: svn

集成服务器: jenkin

GIT支持离线工作,更适合开源软件或者开发人员不能集中办公情况下的版本管理工作。同时,SVN和GIT可以配合使用。

SCM工具 江湖地位 控制方式 原子提交 并发冲突解决 权限管理 支持变更范围
CVS 资格最老,但逐渐衰退 集中式 NO 排它锁 方法有限 文件
SVN(Subversion) CVS的升级,目前较为主流 集中式 YES 合并模式(通知冲突) 支持目录级。通过工具可支持文件级 文件、目录
GIT Eclipse.org上使用最多 分布式 YES 合并模式 权限配置较为困难 文件、目录

为什么要使用

1. 尽量实现自动化

通过配置jenkin实现:

自动编译、测试、打包、生成注释、代码质量检测、发布、邮件通知

定时持续集成

2. 将开发人员工作减少到最低

编写设计和使用文档、

编写源代码、

点击“更新”和“提交”键

3. Jar javadoc resource的自动绑定

4. 提供工程信息的一站式服务

通过使用 maven 的site站点,在网页上展示项目描述、项目文档、javadoc、源代码等信息,方便查找,也方便新人进入。如图所示:

5. 与其它工具结合的持续代码质量改进。如与CheckStyle, PMD, FindBugs, Fxcop等等等等的结合。

现在系统中引入了一个findbug,这个检查工具比较简单也比较靠谱,一般来说代码改进工具都需要根据部门情况进行定制。

6. 与测试工具或者框架结合的持续测试。如与xUnit,SilkTest, LoadRunner等等的结合。

现在系统中是与 testNG相结合,测试报告在 jenkin中可以看到,方法同上:

7. 便于Code Review。在每个build里,我们都可以知道与前一个build之间有什么改动,然后针对这些改动,我们就可以实施Code Review了。

8. 易于定位错误。也就是当你的持续集成失败了,说明你新加的代码或者修改的代码引起了错误,这样你很容易的就可以知道到底是谁犯了错误,可以找谁来讨论。

通过查看构建日志,确认是什么问题,如:

常见流程

1. 从svn下载程序

2. 编写代码和测试,commit到svn

3. jenkin服务器根据触发条件,从svn提取最新代码,交给构建工具maven

4. maven 对代码进行编译、测试,并进行打包。如有必要,实现产品部署、发布

5. maven 插件进行集成测试、代码质量管理

6. 使用 site插件建立、管理项目开发的工作网站

环境修改

Svn修改

将svn改成英文的url,步骤如下:

某一天下班前完成代码的提交

我将代码复制到英文目录下,废弃原有svn地址

第二天其他人从新的svn地址 checkout

MAVEN_HOME/conf/settings.xml

主要修改两部分:

1. 将下载地址从远端修改为 nexus,(不要配置mirror,有些问题)

<profiles>
<profile>
<id>dev</id>
<repositories>
<repository>
<id>local-nexus</id>
<url>http://[ip]:8081/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>third-party</id>
<url>http:// [ip]:8081/nexus/content/repositories/thirdparty/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>snapshot</id>
<url>http:// [ip]:8081/nexus/content/repositories/snapshots/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>release</id>
<url>http:// [ip]:8081/nexus/content/repositories/releases/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
<activeProfiles>
<activeProfile>dev</activeProfile>
</activeProfiles>

2. 当执行 mvn deploy发布共享的jar时,能发布到nexus的snapshots中

<servers>
….
<server>
<id>third</id>
<username>admin</username>
<password>pass</password>
</server>
<server>
<id>snapshot</id>
<username>admin</username>
<password>pass</password>
</server>
<server>
<id>release</id>
<username>admin</username>
<password>pass</password>
</server>
</servers>

Project中的pom.xml

根据自己开发的项目作出相应的修改

特色功能

项目间共享

如 A项目要用到B中的代码,

在B项目下,执行deploy功能 :

配置pom.xml 的distributionManagement;

配置setting.xml的 server;

执行 mvn deploy

上传maven没有的jar

通过在pom.xml中配置为 <scope>system</scope>来实现

<dependency>
<groupId>aaa</groupId>
<artifactId>shareview</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${basedir}/src/main/webapp/WEB-INF/lib/aaa-share-view.jar</systemPath>
</dependency>

Eclipse的jar加入javadoc和resource

实现步骤:

1. 运行 mvn dependency:resource下载源代码

2. 运行mvndependency:resolve -Dclassifier=javadoc 下载javadoc

3. 运行mvneclipse:eclipse –Dwtpversion=1.0 生成工程的classpath

效果如下:

生成报告

已经实现自动生成 javadoc ,描述信息,单元测试报告,网页显示源代码,设计和帮助文档,findbug、pwd报告。

其中加入设计文档比较麻烦,步骤如下:

1. 将报告转换为html或pdf格式

2. 放入src/site/resources目录下相应目录

3. 修改 src/site/site.xml文档, 建立连接指向该文档

具体参考 site plugin的网站,和scie-web-view下的site.xml文件

自动发布

Jenkin的deploy插件

Shell脚本实现

参考文档

持续集成10日谈:

http://blog.csdn.net/leijiantian/article/details/7916483 PS:条理非常清晰

开发各阶段和CI的整合

1、 需求分析阶段:

生成项目的maven站点,加入项目基本信息和需求分析相关文档

2、 系统设计阶段

向maven站点加入系统设计相关文档(功能设计、数据库设计等)

CI准备工作:确定项目的目录结构;生成SVN仓库;编写POM文件;在Jenkins上新建job

3、 开发、测试阶段:

程序员使用TDD开发方式,周期性提交源代码

CI自动进行代码编译、单元测试,在maven站点自动生成相应运行报告

测试人员可以随时进行产品新版本的界面测试

需求分析、设计文档如发生变化,也及时提交至maven站点

4、 安装部署阶段:

根据开发、测试结果,随时进行阶段性的自动(远程)部署(war/ear等文件)

5、 项目收尾阶段:

源代码存档:从SVN仓库中checkout项目各版本的源代码

项目文档存档:(如果对设计文档进行了SVN管理)从SVN仓库中checkout文档;

备份maven站点

nexus四个阶段

Nexus 主要实现两个作用:

Proxy: 代理远端的maven站点,加快下载速度;

Hosted:将内部共享的jar deploy,完成共享

四个阶段:

参考:http://books.sonatype.com/nexus-book/reference/repoman-sect-adopting.html

自动化生成版本号

思路:

建立svn仓库和release版本号的对应。在SVN\trunk中某个版本号的源代码执行构建任务成功后,利用maven的插件,将这个版本号的源代码copy到SVN\Tags中的以release 版本号命名的子目录下。

相应的操作步骤如下:

1、在pom.xml中设置maven-release-plugin(在build中的plugins; pom中要配置 SCM)

2、建立一个Jenkins job,并进行设置

3、执行构建任务

参考 :

http://blog.csdn.net/leijiantian/article/details/7936321 http://juvenshun.iteye.com/blog/376422

tomcat下webapp的自动发布
事先需要设置tomcat的manager-script用户和密码。方法:进入tomcat的安装目录/conf下,找到tomcat-users.xml,打开,增加下列内容:

<role rolename="manager-script"/>
                              <user username="tomcat" password="tomcat"roles="manager-script"/>

设置好后,在Manager user name和Managerpassword中分别填入“tomcat”、“tomcat”。如果没有设置这些用户信息,在自动构建部署时则会提示你一大堆的错误信息,呵呵。

Tomcat URL为“http://127.0.0.1:8080”或者“http://localhost:8080”,地址字符串最后千万不要加"/",不然找不到正确的manager目录哦。

修改记录

使用maven的 changelog插件

<!--changelog报告的生成需要明确指明SCM来源。若无SCM设置,其它报告可以生成
(因为Jenkins设置了源代码仓库所在位置),但changelog报告无法生成。--> 

<scm>

<connection>scm:svn:https://firstlevel/svn/newdemo/trunk</connection>

<developerConnection> scm:svn:https://firstlevel/svn/newdemo/trunk</developerConnection>

</scm>

在<developers> 配置的开发者name最好和svn中name一样,这样maven会认为这两个是同一个人!可以通过超链的方式把SVN的用户与maven的用户连接在一起。

相关文章

为什么要做持续部署?
剖析“持续交付”:五个核心实践
集成与构建指南
持续集成工具的选择-装载
相关文档

持续集成介绍
使用Hudson持续集成
持续集成之-依赖管理
IPD集成产品开发管理
相关课程

配置管理、日构建与持续集成
软件架构设计方法、案例与实践
单元测试、重构及持续集成
基于Android的单元、性能测试
 
分享到
 
 


集成与构建指南
项目管理:Maven让事情变得简单
持续集成工具hudson
持续集成
Maven权威指南
程序集(UML中的包)之间循环
更多...   


产品发布管理
配置管理方法、实践、工具
多层次集成配置管理
使用CC与CQ进行项目实践
CVS与配置管理
Subversion管理员


海航股份 重构及持续集成
电研华源 设计原理、建模与重构
软件配置管理日构建及持续集成
单元测试、重构及持续集成
中国软件研发中心 单元测试与重构
单元测试、重构和持续集成实践
罗克韦尔 C++单元测试+重构+Gtest
更多...