Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5224041
  • 博文数量: 1696
  • 博客积分: 10870
  • 博客等级: 上将
  • 技术积分: 18357
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-30 15:16
文章分类
文章存档

2017年(1)

2016年(1)

2015年(1)

2013年(1)

2012年(43)

2011年(17)

2010年(828)

2009年(568)

2008年(185)

2007年(51)

分类: 项目管理

2010-09-07 17:14:17

自己两个多星期以来对持续集成的概念和应用有了一些了解。下面主要对自己配置持续集成的环境进行总结。(看上去简单,但是对我开始对持续集成都没什么了解的人来说确实费了不少周折)

一  本次持续集成环境的搭建所使用的工具有

 cruisecontrol、ant、svn、junit、Slik-Subversion-1.5.6-win32、svnant-1.1.0-RC2.zip

 cruisecontrol:是一种持续集成过程的框架,包括了邮件通知,ant 和各种源码控  制工具的插 件。并提供了web接口,用于查看当前和以前的创建的结果.

ant:构建工具。

svn:版本控制工具。

junit:单元测试工具。

slik-subversion:是为了调用svn的客户端命令安装的。

svnant:主要是用到它里面的lib中的jar包,它具体使用还不是很清楚

另外本次的辅助环境还有jdk,相信大家都再也熟悉不过了。

二 环境的搭建步骤:

  1. jdk的安装:根据jdk安装包的提示安装jdk。设置系统的环境变量:

a) JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径D:\java\jdk1.5.0_08,此路径下包括libbinjre等文件夹(此变量最好设置,因为以后运行tomcat都需要依赖此变量);

b) Path使得系统可以在任何路径下识别java命令,设为%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

 c)CLASSPATH为java加载类(class or lib)路径,只有类在  classpath中,java命令才能识别,设为:.;JAVA_HOME\lib\dt.jar;JAVA_HOME%   \lib\tools.jar (要加.表示当前路径);%JAVA_HOME%就是引用前面指定的JAVA_HOME;不过本人还是比较相信绝对路径的。 

2 ant的安装:ant是集成构建工具,想必大家都不太陌生了。只需要到ant.apache.org的网站下载ant的适当版本解压缩后,配置系统的环境变量:ANT_HOME:d:\apache-ant-1.7.0, path:d:\apache-ant-1.7.0\bin 后,ant就可以在任意目录下运行了,如cmd下运行ant,显示:buildfile:build.xml does not exsit。。。。。

3 安装svn,因为cruisecontrol要用到svn(不知道这两个有什么先后顺序没,因为cc要用svn就先装cc喽)。svn的安装TortoiseSVN-1.5.3.13783-win32-svn-1.5.2.msi安装提示装就可以了。

4 安装tomcat ,设置系统环境变量CATALINA_HOME=c:\tomcat,CLASSPATH=C:\tomcat\common\lib(加载必要的包)。

5 cuisecontrol的安装,因为本文使用的操作系统为XP,就使用CruiseControl-2.8.2.exe安装就可以了(.exe文件还是很受大家喜欢的)。配置系统的环境变量:CC_HOME=d:\cruisecontrol

6 安装slik-subversion,它会自动写入到path=D:\SlikSvn\bin\ 如果没有写入的话,要麻烦手动加入到系统的环境变量path中,本人曾经遇到过,cmd窗口已经打开但是配置文件执行过程中svn的命令总不能识别发现此 处的路径没有加入到path中。

7下载svnant-1.1.0-RC2.zip,把lib包中的jar考到ant的jar中。

三 以上的准备工作已经基本搞定,下面就介绍一下配置文件。此次环境的搭建配置文件是很关键的,因为他们各自有自己的标签,所以还要想达到什么功能慢慢查找,(如果有时间系统学习一下就好了)。

1 ant的关键文件为build.xml(当然也可以起别的名称,自己还要改它的启动文件,就用这个名称吧)下面是一个实例:

定义basedir当前的根目录,default默认执行的标签,name工程名

 

定义tomcat的安装目录
 

定义debug的级别
 

为了引用tomcat固有包方便所以增加次属性
 

指定要编译的工程目录
 
 
 

编译时候所使用的类路径,id为引用的名称
 
  
  ....
  
 

 
  
  .............
  
 

 
 
  
 

 

 
 
 

 
  
  
 

clean操作,如果build之前不执行此操作,build检查到原有的class文件就不再编译。
 
    
    
  
 

要build模块的名称build-framework看来可以随便起名字,但是有人说必须和模块名称一致,至今还不知道为什么
 
  
  
  
   
  

  
   
   
   
  

 

单元测试的部分
 test">
  
  
   
    
    
         
   

  

  
  
   
    
    
    
   

   
   
   
    
   

  

 

打包放到指定目录
 
  
   
  

  
   
  

 

调用svn命令,这与三中的步骤7有密切的联系

 
        
    

 

 


注释:

a设置编译所需要的类路径可以用:                     
     
     
       
     

     
     
       
       
     

     

  

depends表示依赖关系
 2 cruisecontrol的config文件,CC启动的时候会自动寻找此文件,当然你可以通过修改启动文件修改config.xml名称,只要两处一致就能找到,下面是一个config文件的实例:

//cc的固有标签,cc中可以有多个project

 // 工程名称


       // 显示svn的版本号

listeners:监听器,来报告cc的此项目的运行信息
  
   
  

bootstrappers从svn源码控制程序更新本地版本,据说还有向其它插件提供当前创建的状态

  
   
  

  //向ant提供当前信息
   
  

  // 通过svn更新原代码
   
   
  

设定检查编译build版本的时间单位s
   
  

  //显示单元测试信息
   
  

  //发布版本
   //成功,并生成有时间戳的目录
    
   

   //失败发送邮件到响应的人员
    
     
    

   

  

 
 
  
   
  

  
   
  

  
   
  

        //设置只有framework工程成功了才执行此次的操作,体现了project的依赖关系
          
       

 

四 启动CC可以实现集成编译、集成构建、单元测试的功能,对于持续构建这是最简单不过了,要继续努力学习哦。

五 持续集成使用了一段时间发现了源代码目录总是不能自动更新,认真查找发现是因为自己对标签的理解不正确,现在就是在ant的build.xml中调用svn的提交命令来解决的,不知道思路是否正确,请大家指教。

下面就更清晰的介绍一下常用的标签把。

CC配置文件范connectfour范例Config.xml如下:


   

       
           
       

       
           
       

       
           
           
       

       
           
       

       
           
       

       
           
               
           

       

   

根元素是,该元素很简单,没什么需要配置的属性。

目前CC支持多项目(multiproject),因此可以有多个并行的元素。支持的子元素包括:
 
     
     
     
     
     
        
        
        
        
        
     
     

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
     
     

        
        
        
        
        
        
        
           
           
        
        

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
     
     

        
        
        
        
        
        
        
        
        
     
     

        


     
     

        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
     
  

 子元素过多所以详情可以参看官方文档的说明。

这里只介绍几个常用的子元素:

:在创建之前会运行,相当于一个预处理的作用,下面每个子元素都是独立的,因此可以同时配置多个bootstrappers。

CC提供的bootstrappers包括两种,一种用于向其他插 件提供项目当前创建的状态,还有一种是从某个源码控制系统更新本地文件,其中最常用的就 是指定了状态文件的 位置,主要是用来访问项目当前创建的状态,CC的会将创基爱你的状态写入 这个文件。

的作用有点难理解,因为我们每次项目的创建都应该基于最新的代码,因此在创建之前就要获得最新的项目文 件,如果使用的是ant来完成这个任务,那么buildfile本身在创建开始之前发生了变化,我们是不是应该先更新这个buildfile,然后才通过 buildfile来对项目进行构建呢?就是为从源码控制系统更新buildfile文件而设计的(还有 一种替代的使用方法是使用wrapper buildfile,这样就不用使用了,wrapper buildfile也是推荐的方法,部分会进行详细的讨论)。

<modificationset>:包括了SourceControl插件的配置信息,用于检查各个源码控制系统中是否发生变化,会用到这里的配置信息,如果检测到变化,会触发创建过程。

的属性quietperiod(单位为秒)定义了一个时间值。如果CC检查到了变化,会自检查到变化的源码控制系统的最后一次check in 的时间开始等待,等待时间由quietperiod决定,等待结束之后才触发创建(build)过程,主要是防止有人在check in的过程当中就触发创建过程(可能check in只做了一半,这个时候触发创建显然是不正确的).

下面是一个modificationset的例子:


           

阅读(1632) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2011-01-03 17:58:31

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com

chinaunix网友2010-10-08 16:21:20

cruisecontrol很不错,我们有用Hudson和Topo做过持续集成,也还不错。