技术开发 频道

基于maven和hudson打造持续集成环境

【IT168 技术】  对持续集成的需求

  对持续集成的需求主要来自项目过程的痛,在代码控制和管理方面我有以下几个方面的痛:

  • 环境时好时坏,开发人员对commit代码不够慎重
  • 缺乏一个统一集成的报告来反映项目质量各个方面
  • 各种代码检查工具运用门槛高
  • 无法量化开发人员的代码质量
  • 缺乏一种推进单元测试的有效手段

  正因为有了上面的疼,让我想到了持续集成

  持续集成原理和相应工具

  持续集成的结构和原理由下图所示: 

基于maven和hudson打造持续集成环境

  说起来就一句话,持续集成就是用一套工具自动化地接管代码构建的整个生命周期。在这么一个流程中主要需要三类工具:

  构建工具:maven

  调度和控制平台:hudson

  report工具:sonar

  这些工具使用非常广泛,我就不多加介绍,下面记录一下我在实际项目中的具体实施过程

  具体实施过程

  1)搭建SCM环境

  hudson每次启动构建生命周期是从去最新代码开始的,因此有必要配置好SCM环境,我在项目里使用SVN,具体配置就不多加介绍

  2)配置maven,支持代码检查工具

  若需要某些代码检查工具,如PMD、Cobertura等,需要在pom.xml里配置maven plugin,如下所示: 

1 <plugin>  
2         <artifactId>maven-surefire-report-plugin</artifactId>  
3         <groupId>org.apache.maven.plugins</groupId>  
4         <version>2.4.3</version>  
5         <configuration>  
6            <outputDirectory>${junitHtmlReportDir}</outputDirectory>  
7            <outputName>index.html</outputName>  
8         </configuration>  
9      </plugin>  
10         <plugin>  
11             <groupId>org.sonatype.maven.plugin</groupId>  
12             <artifactId>emma-maven-plugin</artifactId>  
13             <version>1.2</version>  
14         </plugin>  
15         <plugin>  
16             <groupId>org.codehaus.mojo</groupId>  
17             <artifactId>cobertura-maven-plugin</artifactId>  
18             <version>2.4</version>  
19         </plugin>  

  3)持续集成服务器

  最好把持续集成服务器与开发服务器分开,单独管理。持续集成对环境没有特殊需求,只需一个能运行war包的web服务器就行。然后把下载好hudson.war部署在服务器上即可。顺便提一下,强大的hudson只不过是一个编译好的war包,因此安装它非常简单,和部署一个简单的web应用没什么区别

  4)配置需要持续化集成的应用

  浏览器里访问hudson服务器,如http://10.20.147.111:8080/hudson/

  新建任务,具体属性按照帮助tip填写即可,关键是配置SCM地址和构建调度时间点,另外要特别勾选Sonar

  立即生成。在生成过程中可以点击“命令行输出”查看构建过程。构建过程和直接命令行里运行maven一样

  5)发送邮件给相关人

  可以在hudson里配置邮件列表,每次构建后会把报告发给指定人

  6)查看报告

  每次构建完成后可以在sonar服务器里查看到各种维度的报告,实例图如下所示: 

基于maven和hudson打造持续集成环境

  实施经验

  以上只是一个标准持续化构建流程的实施过程,这其中会根据具体需求有很多定制化的配置和技巧,在这几天实施过程中有如下经验可以分享:

  • 持续化集成是否有效果关键在于项目的单元测试的实施程度,如果贯彻得彻底则会极大地提升代码质量,各种报告才能有说服力,不然只是个玩具而已,只能告诉你项目没有编译问题
  • 通过工具来check代码规范和质量的实施情况。在sonar的配置面板里可以设置Quality profiles,这里预置了Checkstyle、Findbugs、PMD、Squid等几个代码检查框架,可以勾选出适合的检查点。关于这一点,项目架构师需要列好项目质量考核维度和风格规范,通过工具来check规范的实施情况
  • 如果有历史问题阻碍持续化集成就暂时略过它。有些项目以前没有贯彻过单元测试,这时很有可能由于单元测试不通过使得持续集成很难开展,或是代码覆盖率太低打击大家的信心。这可以把不需要这这期项目check的代码可以略去。单元测试这块可以在pom.xml里加上配置: 
    1 <plugin>  
    2                 <groupId>org.apache.maven.plugins</groupId>  
    3                 <artifactId>maven-surefire-plugin</artifactId>  
    4                 <configuration>  
    5                     <skip>true</skip>  
    6                 </configuration>  
    7             </plugin>

  另外要略过某些模块的代码覆盖率,可以在sonar->settings->General里设置,可以略过某些模块,也可以略过某些具体代码类,配置例子如下: 

 

基于maven和hudson打造持续集成环境

  • 持续化集成过程不能依赖任何第三方系统,如果有依赖就有可能因为环境问题导致某些时候单元测试不通过,因此单元测试在与第三方交互的地方都得mock,并且需要连根拔出,不能仅仅只是在单元测试类里面mock,因为这只能保证你的单元测试通过,但不能保证别人的单元测试调用到mock,可以通过spring的bean配置这块直接把mock类替换真实类,然后区分测试模块和实际模块的bean配置
  • 持续化集成虽好,但需要老板的支持。只有通过一定强制化才能让持续化集成得到真正执行,通过报告的某些维度来考核开发人员的代码质量,也绩效挂钩是比较好的办法

        原文链接:

0