浅谈持续集成CC

  最近一段时间一直对CI工具非常关注,正好前两天终于有点时间,把这个好好用了一下,所以写了这篇文档。最新版本为3.0,可以从http://cruisecontrol.sourceforge.net/下载.

  1. 要想用得先下载,地址就不提了,占地儿。我下载的是最新版本cruisecontrol-bin-2.3.1.zip,如果不是研究的话,建议最好下载一个bin包,这样能省去很多麻烦。解压后我们能看到一些目录。

    最新版本cruisecontrol-bin-2.3.1.zip

      其中CruiseControl(以下简称CC)自带ant1.6.3;文档在docs目录下,这里面包括config.xml的相关的参数设置说明;logs下面包括日志信息,可以通过在config.xml中指定日志路径和名称;projects下面放的是需要进行持续集成的项目,jarkarta-commons是使用apache的math项目作例子;lib目录中放有cruisecontrol.jar和其他运行需要的jar;webapps下是cruisecontrol build结果的网站,可以通过访问 http://127.0.0.1:8080/cruisecontrol 来查看build的结果;在build后会产生artifacts目录,这个目录用来存放发布的工件。

  2. 使用cruisecontrol前的准备工作
    1. 建立CVS管理项目源码

        建议最好使用CVS管理源码,好处在这里就勿需多言了。具体创建的过程可以参考相关的《CVS使用手册》,这里需要注意的是module的设置,可以参照相应的文档来设置。

    2. 设置ANT环境变量

        ANT的使用也不是本篇所要阐述的,在这里只是说一些可能碰到的情况。在按照ANT的使用指南配置好后,可以在其他环境下试一下是否好用,如果你的JDK比较新的话最好也用比较新的ant,这里使用的是CC自带的ant,本文的环境是JDK5.0+Ant1.6.3+Eclipse3.1+Tomcat5.5,OS:WinXP SP2

    3. 编写项目的build.xml

        接下来用需要编写的是ant的build.xml文件,在本文中,我编写了这样的一个例子,为了便于理解,target都采用了中文,接下来我们会看到。另外,在编写build文件的时候,我还发现一个问题,我编写的build文件怎么也不好用,只要一Run as ant,就会报异常,而在命令提示符下运行ant则没有这个问题,经过一段时间检查,发现原来是Eclipse所带的ant版本比较低,后来下载新的ant后没有更新eclipse的ant目录,需要进行如下的设置:

      编写项目的build.xml

    4. Checkout项目到CC_HOME/projects目录

        配置好CVSROOT后,在CC_HOME/projects下执行$ cvs checkout module_name 具体的配置方法在这里不说了。这是需要手工作的,否则CC是不会自动监测变更的。

    5. 修改config.xml

        根据实际项目的情况修改config.xml的情况,我们下面会用一个例子来说明。

  3. 运行cruisecontrol

      在作完上面的工作后,我们就可以启动CC了,如果是在unix平台下需要执行

      $ CC_HOME/ cruisecontrol.sh ;如果是在windows平台下执行cruisecontrol.bat,成功后会出现如下的界面:

      屏幕上出现Project commons-math started和BuildQueue started提示就说明已经正确的执行了CC。

    运行cruisecontrol

      在执行后,我们可以通过IE查看build情况,界面如下:

      下面显示的是build的结果,现在的结果是BUILD FAILED,因为写这篇文档时网络不通,所以无法连接到apache上获得程序进行编译,就出现了错误。

    通过IE查看build情况

    通过IE查看build情况

      我们可以看到,CC还提供了RSS订阅的功能,借助RSS阅读器,我们可以方便的获得最新的构建信息。界面如下:

    可以方便的获得最新的构建信息

      好,我们见过了CC的使用过程,下面让我们通过一个例子来实现这个过程。

  4. 例子

      在这个例子中,我们新建了一个项目,项目的名字叫hello,项目的结构如下:

    例子

      main/src/java/com/test/qik/HelloMaven.java:示例的程序

    package com.test.qik;public class HelloMaven {		public static boolean main(String[] args) {		System.out.println("Hello, maven!");		return true;	}		public void testa() throws Exception {				System.out.println("test,可以发布到生产库的版本");			}}main/test/java/com/test/qik/HelloMavenTest.java:示例程序的单元测试用例package com.test.qik;import junit.framework.TestCase;public class HelloMavenTest extends TestCase {	public static void main(String[] args) {	}	public HelloMavenTest(String arg0) {		super(arg0);	}	protected void setUp() throws Exception {		super.setUp();	}	protected void tearDown() throws Exception {		super.tearDown();	}	/*	 * Test method for 'com.test.qik.HelloMaven.main(String[])'	 */	public void testMain() {		HelloMaven hm = new HelloMaven();		assertEquals(hm.main(null),true);	}}target/:输出路径build.xml:ant的构建文件文件内容如下:==============================================================
        
        
        
        	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         		
          
          
           
           正在删除源程序目录...
          
          		
          
          		
          
          
           
           正在创建源程序目录...
          
          		
          
          		
          
          
           
           正在删除测试程序目录...
          
          		
          
          		
          
          
           
           正在创建测试程序目录...
          
          		
          
          		
          
          
           
           正在删除编译程序目录...
          
          		
          
          		
          
          
           
           正在创建编译程序目录...
          
          		
          
          		
          
          
           
           正在删除lib目录...
          
          		
          
          		
          
          
           
           正在创建lib目录...
          
          		
          
          		
          
          
           
           正在删除单元测试报告目录...
          
          		
          
          		
          
          
           
           正在创建单元测试报告目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           从CVS中获取源码...
          
          		
          
          	
         
         	
         
         		
          
          
           
           从CVS中获取lib目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           编译程序...
          
          		
          
          			
           
           			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           运行单元测试用例...
          
          		
          
          			
           
           			
           
           			
           
           				
            
            					
             
             					
             
             				
            
            			
           
           		
          
          		
          
          
           
           生成单元测试报告...
          
          		
          
          			
           
           				
            
            			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           发送测试报告邮件...
          
          		
          
          			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           打包成jar文件...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         	
         
         		
          
          			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         
        
        ==============================================================对config.xml设置的内容
        
          
         
               
          
               
           
              
          
                
          
               
           
              
          
             
          
             
          
           
           
                
           
                
           
              
          
             
          
             
          
               
           
           
           
              
          
                
          
             	
           
              
          
          
          
                
          
             	
           
              
          
          
          
               
         
         
        
        CC_HOME/docs/main/configxml.html这个文件是config.xml的帮助内容,我们可以从这里面找到所有的配置。
  5. 总结

      我们可以看到整个过程还是很简单的,通过CC,我们可以部分减轻CI的工作量,但可以看到核心的构建工作还是在project的build.xml中,如果CC能提供常见的模版就更好了(呵呵,我还是想偷懒)。另外CC的监控本地工作目录的功能有些弱智,比如我只写了"projects/hello",则它只认为在”project/hello”目录下的文件有更新才启动build过程,如果我们更新的是下面的子目录,则不能自动监控。

     



  最近一段时间一直对CI工具非常关注,正好前两天终于有点时间,把这个好好用了一下,所以写了这篇文档。最新版本为3.0,可以从http://cruisecontrol.sourceforge.net/下载.

  1. 要想用得先下载,地址就不提了,占地儿。我下载的是最新版本cruisecontrol-bin-2.3.1.zip,如果不是研究的话,建议最好下载一个bin包,这样能省去很多麻烦。解压后我们能看到一些目录。

    最新版本cruisecontrol-bin-2.3.1.zip

      其中CruiseControl(以下简称CC)自带ant1.6.3;文档在docs目录下,这里面包括config.xml的相关的参数设置说明;logs下面包括日志信息,可以通过在config.xml中指定日志路径和名称;projects下面放的是需要进行持续集成的项目,jarkarta-commons是使用apache的math项目作例子;lib目录中放有cruisecontrol.jar和其他运行需要的jar;webapps下是cruisecontrol build结果的网站,可以通过访问 http://127.0.0.1:8080/cruisecontrol 来查看build的结果;在build后会产生artifacts目录,这个目录用来存放发布的工件。

  2. 使用cruisecontrol前的准备工作
    1. 建立CVS管理项目源码

        建议最好使用CVS管理源码,好处在这里就勿需多言了。具体创建的过程可以参考相关的《CVS使用手册》,这里需要注意的是module的设置,可以参照相应的文档来设置。

    2. 设置ANT环境变量

        ANT的使用也不是本篇所要阐述的,在这里只是说一些可能碰到的情况。在按照ANT的使用指南配置好后,可以在其他环境下试一下是否好用,如果你的JDK比较新的话最好也用比较新的ant,这里使用的是CC自带的ant,本文的环境是JDK5.0+Ant1.6.3+Eclipse3.1+Tomcat5.5,OS:WinXP SP2

    3. 编写项目的build.xml

        接下来用需要编写的是ant的build.xml文件,在本文中,我编写了这样的一个例子,为了便于理解,target都采用了中文,接下来我们会看到。另外,在编写build文件的时候,我还发现一个问题,我编写的build文件怎么也不好用,只要一Run as ant,就会报异常,而在命令提示符下运行ant则没有这个问题,经过一段时间检查,发现原来是Eclipse所带的ant版本比较低,后来下载新的ant后没有更新eclipse的ant目录,需要进行如下的设置:

      编写项目的build.xml

    4. Checkout项目到CC_HOME/projects目录

        配置好CVSROOT后,在CC_HOME/projects下执行$ cvs checkout module_name 具体的配置方法在这里不说了。这是需要手工作的,否则CC是不会自动监测变更的。

    5. 修改config.xml

        根据实际项目的情况修改config.xml的情况,我们下面会用一个例子来说明。

  3. 运行cruisecontrol

      在作完上面的工作后,我们就可以启动CC了,如果是在unix平台下需要执行

      $ CC_HOME/ cruisecontrol.sh ;如果是在windows平台下执行cruisecontrol.bat,成功后会出现如下的界面:

      屏幕上出现Project commons-math started和BuildQueue started提示就说明已经正确的执行了CC。

    运行cruisecontrol

      在执行后,我们可以通过IE查看build情况,界面如下:

      下面显示的是build的结果,现在的结果是BUILD FAILED,因为写这篇文档时网络不通,所以无法连接到apache上获得程序进行编译,就出现了错误。

    通过IE查看build情况

    通过IE查看build情况

      我们可以看到,CC还提供了RSS订阅的功能,借助RSS阅读器,我们可以方便的获得最新的构建信息。界面如下:

    可以方便的获得最新的构建信息

      好,我们见过了CC的使用过程,下面让我们通过一个例子来实现这个过程。

  4. 例子

      在这个例子中,我们新建了一个项目,项目的名字叫hello,项目的结构如下:

    例子

      main/src/java/com/test/qik/HelloMaven.java:示例的程序

    package com.test.qik;public class HelloMaven {		public static boolean main(String[] args) {		System.out.println("Hello, maven!");		return true;	}		public void testa() throws Exception {				System.out.println("test,可以发布到生产库的版本");			}}main/test/java/com/test/qik/HelloMavenTest.java:示例程序的单元测试用例package com.test.qik;import junit.framework.TestCase;public class HelloMavenTest extends TestCase {	public static void main(String[] args) {	}	public HelloMavenTest(String arg0) {		super(arg0);	}	protected void setUp() throws Exception {		super.setUp();	}	protected void tearDown() throws Exception {		super.tearDown();	}	/*	 * Test method for 'com.test.qik.HelloMaven.main(String[])'	 */	public void testMain() {		HelloMaven hm = new HelloMaven();		assertEquals(hm.main(null),true);	}}target/:输出路径build.xml:ant的构建文件文件内容如下:==============================================================
        
        
        
        	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         		
          
          
           
           正在删除源程序目录...
          
          		
          
          		
          
          
           
           正在创建源程序目录...
          
          		
          
          		
          
          
           
           正在删除测试程序目录...
          
          		
          
          		
          
          
           
           正在创建测试程序目录...
          
          		
          
          		
          
          
           
           正在删除编译程序目录...
          
          		
          
          		
          
          
           
           正在创建编译程序目录...
          
          		
          
          		
          
          
           
           正在删除lib目录...
          
          		
          
          		
          
          
           
           正在创建lib目录...
          
          		
          
          		
          
          
           
           正在删除单元测试报告目录...
          
          		
          
          		
          
          
           
           正在创建单元测试报告目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           从CVS中获取源码...
          
          		
          
          	
         
         	
         
         		
          
          
           
           从CVS中获取lib目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           编译程序...
          
          		
          
          			
           
           			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           运行单元测试用例...
          
          		
          
          			
           
           			
           
           			
           
           				
            
            					
             
             					
             
             				
            
            			
           
           		
          
          		
          
          
           
           生成单元测试报告...
          
          		
          
          			
           
           				
            
            			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           发送测试报告邮件...
          
          		
          
          			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           打包成jar文件...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         	
         
         		
          
          			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         
        
        ==============================================================对config.xml设置的内容
        
          
         
               
          
               
           
              
          
                
          
               
           
              
          
             
          
             
          
           
           
                
           
                
           
              
          
             
          
             
          
               
           
           
           
              
          
                
          
             	
           
              
          
          
          
                
          
             	
           
              
          
          
          
               
         
         
        
        CC_HOME/docs/main/configxml.html这个文件是config.xml的帮助内容,我们可以从这里面找到所有的配置。
  5. 总结

      我们可以看到整个过程还是很简单的,通过CC,我们可以部分减轻CI的工作量,但可以看到核心的构建工作还是在project的build.xml中,如果CC能提供常见的模版就更好了(呵呵,我还是想偷懒)。另外CC的监控本地工作目录的功能有些弱智,比如我只写了"projects/hello",则它只认为在”project/hello”目录下的文件有更新才启动build过程,如果我们更新的是下面的子目录,则不能自动监控。

     



  最近一段时间一直对CI工具非常关注,正好前两天终于有点时间,把这个好好用了一下,所以写了这篇文档。最新版本为3.0,可以从http://cruisecontrol.sourceforge.net/下载.

  1. 要想用得先下载,地址就不提了,占地儿。我下载的是最新版本cruisecontrol-bin-2.3.1.zip,如果不是研究的话,建议最好下载一个bin包,这样能省去很多麻烦。解压后我们能看到一些目录。

    最新版本cruisecontrol-bin-2.3.1.zip

      其中CruiseControl(以下简称CC)自带ant1.6.3;文档在docs目录下,这里面包括config.xml的相关的参数设置说明;logs下面包括日志信息,可以通过在config.xml中指定日志路径和名称;projects下面放的是需要进行持续集成的项目,jarkarta-commons是使用apache的math项目作例子;lib目录中放有cruisecontrol.jar和其他运行需要的jar;webapps下是cruisecontrol build结果的网站,可以通过访问 http://127.0.0.1:8080/cruisecontrol 来查看build的结果;在build后会产生artifacts目录,这个目录用来存放发布的工件。

  2. 使用cruisecontrol前的准备工作
    1. 建立CVS管理项目源码

        建议最好使用CVS管理源码,好处在这里就勿需多言了。具体创建的过程可以参考相关的《CVS使用手册》,这里需要注意的是module的设置,可以参照相应的文档来设置。

    2. 设置ANT环境变量

        ANT的使用也不是本篇所要阐述的,在这里只是说一些可能碰到的情况。在按照ANT的使用指南配置好后,可以在其他环境下试一下是否好用,如果你的JDK比较新的话最好也用比较新的ant,这里使用的是CC自带的ant,本文的环境是JDK5.0+Ant1.6.3+Eclipse3.1+Tomcat5.5,OS:WinXP SP2

    3. 编写项目的build.xml

        接下来用需要编写的是ant的build.xml文件,在本文中,我编写了这样的一个例子,为了便于理解,target都采用了中文,接下来我们会看到。另外,在编写build文件的时候,我还发现一个问题,我编写的build文件怎么也不好用,只要一Run as ant,就会报异常,而在命令提示符下运行ant则没有这个问题,经过一段时间检查,发现原来是Eclipse所带的ant版本比较低,后来下载新的ant后没有更新eclipse的ant目录,需要进行如下的设置:

      编写项目的build.xml

    4. Checkout项目到CC_HOME/projects目录

        配置好CVSROOT后,在CC_HOME/projects下执行$ cvs checkout module_name 具体的配置方法在这里不说了。这是需要手工作的,否则CC是不会自动监测变更的。

    5. 修改config.xml

        根据实际项目的情况修改config.xml的情况,我们下面会用一个例子来说明。

  3. 运行cruisecontrol

      在作完上面的工作后,我们就可以启动CC了,如果是在unix平台下需要执行

      $ CC_HOME/ cruisecontrol.sh ;如果是在windows平台下执行cruisecontrol.bat,成功后会出现如下的界面:

      屏幕上出现Project commons-math started和BuildQueue started提示就说明已经正确的执行了CC。

    运行cruisecontrol

      在执行后,我们可以通过IE查看build情况,界面如下:

      下面显示的是build的结果,现在的结果是BUILD FAILED,因为写这篇文档时网络不通,所以无法连接到apache上获得程序进行编译,就出现了错误。

    通过IE查看build情况

    通过IE查看build情况

      我们可以看到,CC还提供了RSS订阅的功能,借助RSS阅读器,我们可以方便的获得最新的构建信息。界面如下:

    可以方便的获得最新的构建信息

      好,我们见过了CC的使用过程,下面让我们通过一个例子来实现这个过程。

  4. 例子

      在这个例子中,我们新建了一个项目,项目的名字叫hello,项目的结构如下:

    例子

      main/src/java/com/test/qik/HelloMaven.java:示例的程序

    package com.test.qik;public class HelloMaven {		public static boolean main(String[] args) {		System.out.println("Hello, maven!");		return true;	}		public void testa() throws Exception {				System.out.println("test,可以发布到生产库的版本");			}}main/test/java/com/test/qik/HelloMavenTest.java:示例程序的单元测试用例package com.test.qik;import junit.framework.TestCase;public class HelloMavenTest extends TestCase {	public static void main(String[] args) {	}	public HelloMavenTest(String arg0) {		super(arg0);	}	protected void setUp() throws Exception {		super.setUp();	}	protected void tearDown() throws Exception {		super.tearDown();	}	/*	 * Test method for 'com.test.qik.HelloMaven.main(String[])'	 */	public void testMain() {		HelloMaven hm = new HelloMaven();		assertEquals(hm.main(null),true);	}}target/:输出路径build.xml:ant的构建文件文件内容如下:==============================================================
        
        
        
        	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         		
          
          
           
           正在删除源程序目录...
          
          		
          
          		
          
          
           
           正在创建源程序目录...
          
          		
          
          		
          
          
           
           正在删除测试程序目录...
          
          		
          
          		
          
          
           
           正在创建测试程序目录...
          
          		
          
          		
          
          
           
           正在删除编译程序目录...
          
          		
          
          		
          
          
           
           正在创建编译程序目录...
          
          		
          
          		
          
          
           
           正在删除lib目录...
          
          		
          
          		
          
          
           
           正在创建lib目录...
          
          		
          
          		
          
          
           
           正在删除单元测试报告目录...
          
          		
          
          		
          
          
           
           正在创建单元测试报告目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           从CVS中获取源码...
          
          		
          
          	
         
         	
         
         		
          
          
           
           从CVS中获取lib目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           编译程序...
          
          		
          
          			
           
           			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           运行单元测试用例...
          
          		
          
          			
           
           			
           
           			
           
           				
            
            					
             
             					
             
             				
            
            			
           
           		
          
          		
          
          
           
           生成单元测试报告...
          
          		
          
          			
           
           				
            
            			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           发送测试报告邮件...
          
          		
          
          			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           打包成jar文件...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         	
         
         		
          
          			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         
        
        ==============================================================对config.xml设置的内容
        
          
         
               
          
               
           
              
          
                
          
               
           
              
          
             
          
             
          
           
           
                
           
                
           
              
          
             
          
             
          
               
           
           
           
              
          
                
          
             	
           
              
          
          
          
                
          
             	
           
              
          
          
          
               
         
         
        
        CC_HOME/docs/main/configxml.html这个文件是config.xml的帮助内容,我们可以从这里面找到所有的配置。
  5. 总结

      我们可以看到整个过程还是很简单的,通过CC,我们可以部分减轻CI的工作量,但可以看到核心的构建工作还是在project的build.xml中,如果CC能提供常见的模版就更好了(呵呵,我还是想偷懒)。另外CC的监控本地工作目录的功能有些弱智,比如我只写了"projects/hello",则它只认为在”project/hello”目录下的文件有更新才启动build过程,如果我们更新的是下面的子目录,则不能自动监控。

     



  最近一段时间一直对CI工具非常关注,正好前两天终于有点时间,把这个好好用了一下,所以写了这篇文档。最新版本为3.0,可以从http://cruisecontrol.sourceforge.net/下载.

  1. 要想用得先下载,地址就不提了,占地儿。我下载的是最新版本cruisecontrol-bin-2.3.1.zip,如果不是研究的话,建议最好下载一个bin包,这样能省去很多麻烦。解压后我们能看到一些目录。

    最新版本cruisecontrol-bin-2.3.1.zip

      其中CruiseControl(以下简称CC)自带ant1.6.3;文档在docs目录下,这里面包括config.xml的相关的参数设置说明;logs下面包括日志信息,可以通过在config.xml中指定日志路径和名称;projects下面放的是需要进行持续集成的项目,jarkarta-commons是使用apache的math项目作例子;lib目录中放有cruisecontrol.jar和其他运行需要的jar;webapps下是cruisecontrol build结果的网站,可以通过访问 http://127.0.0.1:8080/cruisecontrol 来查看build的结果;在build后会产生artifacts目录,这个目录用来存放发布的工件。

  2. 使用cruisecontrol前的准备工作
    1. 建立CVS管理项目源码

        建议最好使用CVS管理源码,好处在这里就勿需多言了。具体创建的过程可以参考相关的《CVS使用手册》,这里需要注意的是module的设置,可以参照相应的文档来设置。

    2. 设置ANT环境变量

        ANT的使用也不是本篇所要阐述的,在这里只是说一些可能碰到的情况。在按照ANT的使用指南配置好后,可以在其他环境下试一下是否好用,如果你的JDK比较新的话最好也用比较新的ant,这里使用的是CC自带的ant,本文的环境是JDK5.0+Ant1.6.3+Eclipse3.1+Tomcat5.5,OS:WinXP SP2

    3. 编写项目的build.xml

        接下来用需要编写的是ant的build.xml文件,在本文中,我编写了这样的一个例子,为了便于理解,target都采用了中文,接下来我们会看到。另外,在编写build文件的时候,我还发现一个问题,我编写的build文件怎么也不好用,只要一Run as ant,就会报异常,而在命令提示符下运行ant则没有这个问题,经过一段时间检查,发现原来是Eclipse所带的ant版本比较低,后来下载新的ant后没有更新eclipse的ant目录,需要进行如下的设置:

      编写项目的build.xml

    4. Checkout项目到CC_HOME/projects目录

        配置好CVSROOT后,在CC_HOME/projects下执行$ cvs checkout module_name 具体的配置方法在这里不说了。这是需要手工作的,否则CC是不会自动监测变更的。

    5. 修改config.xml

        根据实际项目的情况修改config.xml的情况,我们下面会用一个例子来说明。

  3. 运行cruisecontrol

      在作完上面的工作后,我们就可以启动CC了,如果是在unix平台下需要执行

      $ CC_HOME/ cruisecontrol.sh ;如果是在windows平台下执行cruisecontrol.bat,成功后会出现如下的界面:

      屏幕上出现Project commons-math started和BuildQueue started提示就说明已经正确的执行了CC。

    运行cruisecontrol

      在执行后,我们可以通过IE查看build情况,界面如下:

      下面显示的是build的结果,现在的结果是BUILD FAILED,因为写这篇文档时网络不通,所以无法连接到apache上获得程序进行编译,就出现了错误。

    通过IE查看build情况

    通过IE查看build情况

      我们可以看到,CC还提供了RSS订阅的功能,借助RSS阅读器,我们可以方便的获得最新的构建信息。界面如下:

    可以方便的获得最新的构建信息

      好,我们见过了CC的使用过程,下面让我们通过一个例子来实现这个过程。

  4. 例子

      在这个例子中,我们新建了一个项目,项目的名字叫hello,项目的结构如下:

    例子

      main/src/java/com/test/qik/HelloMaven.java:示例的程序

    package com.test.qik;public class HelloMaven {		public static boolean main(String[] args) {		System.out.println("Hello, maven!");		return true;	}		public void testa() throws Exception {				System.out.println("test,可以发布到生产库的版本");			}}main/test/java/com/test/qik/HelloMavenTest.java:示例程序的单元测试用例package com.test.qik;import junit.framework.TestCase;public class HelloMavenTest extends TestCase {	public static void main(String[] args) {	}	public HelloMavenTest(String arg0) {		super(arg0);	}	protected void setUp() throws Exception {		super.setUp();	}	protected void tearDown() throws Exception {		super.tearDown();	}	/*	 * Test method for 'com.test.qik.HelloMaven.main(String[])'	 */	public void testMain() {		HelloMaven hm = new HelloMaven();		assertEquals(hm.main(null),true);	}}target/:输出路径build.xml:ant的构建文件文件内容如下:==============================================================
        
        
        
        	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         		
          
          
           
           正在删除源程序目录...
          
          		
          
          		
          
          
           
           正在创建源程序目录...
          
          		
          
          		
          
          
           
           正在删除测试程序目录...
          
          		
          
          		
          
          
           
           正在创建测试程序目录...
          
          		
          
          		
          
          
           
           正在删除编译程序目录...
          
          		
          
          		
          
          
           
           正在创建编译程序目录...
          
          		
          
          		
          
          
           
           正在删除lib目录...
          
          		
          
          		
          
          
           
           正在创建lib目录...
          
          		
          
          		
          
          
           
           正在删除单元测试报告目录...
          
          		
          
          		
          
          
           
           正在创建单元测试报告目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           从CVS中获取源码...
          
          		
          
          	
         
         	
         
         		
          
          
           
           从CVS中获取lib目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           编译程序...
          
          		
          
          			
           
           			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           运行单元测试用例...
          
          		
          
          			
           
           			
           
           			
           
           				
            
            					
             
             					
             
             				
            
            			
           
           		
          
          		
          
          
           
           生成单元测试报告...
          
          		
          
          			
           
           				
            
            			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           发送测试报告邮件...
          
          		
          
          			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           打包成jar文件...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         	
         
         		
          
          			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         
        
        ==============================================================对config.xml设置的内容
        
          
         
               
          
               
           
              
          
                
          
               
           
              
          
             
          
             
          
           
           
                
           
                
           
              
          
             
          
             
          
               
           
           
           
              
          
                
          
             	
           
              
          
          
          
                
          
             	
           
              
          
          
          
               
         
         
        
        CC_HOME/docs/main/configxml.html这个文件是config.xml的帮助内容,我们可以从这里面找到所有的配置。
  5. 总结

      我们可以看到整个过程还是很简单的,通过CC,我们可以部分减轻CI的工作量,但可以看到核心的构建工作还是在project的build.xml中,如果CC能提供常见的模版就更好了(呵呵,我还是想偷懒)。另外CC的监控本地工作目录的功能有些弱智,比如我只写了"projects/hello",则它只认为在”project/hello”目录下的文件有更新才启动build过程,如果我们更新的是下面的子目录,则不能自动监控。

     



  最近一段时间一直对CI工具非常关注,正好前两天终于有点时间,把这个好好用了一下,所以写了这篇文档。最新版本为3.0,可以从http://cruisecontrol.sourceforge.net/下载.

  1. 要想用得先下载,地址就不提了,占地儿。我下载的是最新版本cruisecontrol-bin-2.3.1.zip,如果不是研究的话,建议最好下载一个bin包,这样能省去很多麻烦。解压后我们能看到一些目录。

    最新版本cruisecontrol-bin-2.3.1.zip

      其中CruiseControl(以下简称CC)自带ant1.6.3;文档在docs目录下,这里面包括config.xml的相关的参数设置说明;logs下面包括日志信息,可以通过在config.xml中指定日志路径和名称;projects下面放的是需要进行持续集成的项目,jarkarta-commons是使用apache的math项目作例子;lib目录中放有cruisecontrol.jar和其他运行需要的jar;webapps下是cruisecontrol build结果的网站,可以通过访问 http://127.0.0.1:8080/cruisecontrol 来查看build的结果;在build后会产生artifacts目录,这个目录用来存放发布的工件。

  2. 使用cruisecontrol前的准备工作
    1. 建立CVS管理项目源码

        建议最好使用CVS管理源码,好处在这里就勿需多言了。具体创建的过程可以参考相关的《CVS使用手册》,这里需要注意的是module的设置,可以参照相应的文档来设置。

    2. 设置ANT环境变量

        ANT的使用也不是本篇所要阐述的,在这里只是说一些可能碰到的情况。在按照ANT的使用指南配置好后,可以在其他环境下试一下是否好用,如果你的JDK比较新的话最好也用比较新的ant,这里使用的是CC自带的ant,本文的环境是JDK5.0+Ant1.6.3+Eclipse3.1+Tomcat5.5,OS:WinXP SP2

    3. 编写项目的build.xml

        接下来用需要编写的是ant的build.xml文件,在本文中,我编写了这样的一个例子,为了便于理解,target都采用了中文,接下来我们会看到。另外,在编写build文件的时候,我还发现一个问题,我编写的build文件怎么也不好用,只要一Run as ant,就会报异常,而在命令提示符下运行ant则没有这个问题,经过一段时间检查,发现原来是Eclipse所带的ant版本比较低,后来下载新的ant后没有更新eclipse的ant目录,需要进行如下的设置:

      编写项目的build.xml

    4. Checkout项目到CC_HOME/projects目录

        配置好CVSROOT后,在CC_HOME/projects下执行$ cvs checkout module_name 具体的配置方法在这里不说了。这是需要手工作的,否则CC是不会自动监测变更的。

    5. 修改config.xml

        根据实际项目的情况修改config.xml的情况,我们下面会用一个例子来说明。

  3. 运行cruisecontrol

      在作完上面的工作后,我们就可以启动CC了,如果是在unix平台下需要执行

      $ CC_HOME/ cruisecontrol.sh ;如果是在windows平台下执行cruisecontrol.bat,成功后会出现如下的界面:

      屏幕上出现Project commons-math started和BuildQueue started提示就说明已经正确的执行了CC。

    运行cruisecontrol

      在执行后,我们可以通过IE查看build情况,界面如下:

      下面显示的是build的结果,现在的结果是BUILD FAILED,因为写这篇文档时网络不通,所以无法连接到apache上获得程序进行编译,就出现了错误。

    通过IE查看build情况

    通过IE查看build情况

      我们可以看到,CC还提供了RSS订阅的功能,借助RSS阅读器,我们可以方便的获得最新的构建信息。界面如下:

    可以方便的获得最新的构建信息

      好,我们见过了CC的使用过程,下面让我们通过一个例子来实现这个过程。

  4. 例子

      在这个例子中,我们新建了一个项目,项目的名字叫hello,项目的结构如下:

    例子

      main/src/java/com/test/qik/HelloMaven.java:示例的程序

    package com.test.qik;public class HelloMaven {		public static boolean main(String[] args) {		System.out.println("Hello, maven!");		return true;	}		public void testa() throws Exception {				System.out.println("test,可以发布到生产库的版本");			}}main/test/java/com/test/qik/HelloMavenTest.java:示例程序的单元测试用例package com.test.qik;import junit.framework.TestCase;public class HelloMavenTest extends TestCase {	public static void main(String[] args) {	}	public HelloMavenTest(String arg0) {		super(arg0);	}	protected void setUp() throws Exception {		super.setUp();	}	protected void tearDown() throws Exception {		super.tearDown();	}	/*	 * Test method for 'com.test.qik.HelloMaven.main(String[])'	 */	public void testMain() {		HelloMaven hm = new HelloMaven();		assertEquals(hm.main(null),true);	}}target/:输出路径build.xml:ant的构建文件文件内容如下:==============================================================
        
        
        
        	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         		
          
          
           
           正在删除源程序目录...
          
          		
          
          		
          
          
           
           正在创建源程序目录...
          
          		
          
          		
          
          
           
           正在删除测试程序目录...
          
          		
          
          		
          
          
           
           正在创建测试程序目录...
          
          		
          
          		
          
          
           
           正在删除编译程序目录...
          
          		
          
          		
          
          
           
           正在创建编译程序目录...
          
          		
          
          		
          
          
           
           正在删除lib目录...
          
          		
          
          		
          
          
           
           正在创建lib目录...
          
          		
          
          		
          
          
           
           正在删除单元测试报告目录...
          
          		
          
          		
          
          
           
           正在创建单元测试报告目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           从CVS中获取源码...
          
          		
          
          	
         
         	
         
         		
          
          
           
           从CVS中获取lib目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           编译程序...
          
          		
          
          			
           
           			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           运行单元测试用例...
          
          		
          
          			
           
           			
           
           			
           
           				
            
            					
             
             					
             
             				
            
            			
           
           		
          
          		
          
          
           
           生成单元测试报告...
          
          		
          
          			
           
           				
            
            			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           发送测试报告邮件...
          
          		
          
          			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           打包成jar文件...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         	
         
         		
          
          			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         
        
        ==============================================================对config.xml设置的内容
        
          
         
               
          
               
           
              
          
                
          
               
           
              
          
             
          
             
          
           
           
                
           
                
           
              
          
             
          
             
          
               
           
           
           
              
          
                
          
             	
           
              
          
          
          
                
          
             	
           
              
          
          
          
               
         
         
        
        CC_HOME/docs/main/configxml.html这个文件是config.xml的帮助内容,我们可以从这里面找到所有的配置。
  5. 总结

      我们可以看到整个过程还是很简单的,通过CC,我们可以部分减轻CI的工作量,但可以看到核心的构建工作还是在project的build.xml中,如果CC能提供常见的模版就更好了(呵呵,我还是想偷懒)。另外CC的监控本地工作目录的功能有些弱智,比如我只写了"projects/hello",则它只认为在”project/hello”目录下的文件有更新才启动build过程,如果我们更新的是下面的子目录,则不能自动监控。

     



  最近一段时间一直对CI工具非常关注,正好前两天终于有点时间,把这个好好用了一下,所以写了这篇文档。最新版本为3.0,可以从http://cruisecontrol.sourceforge.net/下载.

  1. 要想用得先下载,地址就不提了,占地儿。我下载的是最新版本cruisecontrol-bin-2.3.1.zip,如果不是研究的话,建议最好下载一个bin包,这样能省去很多麻烦。解压后我们能看到一些目录。

    最新版本cruisecontrol-bin-2.3.1.zip

      其中CruiseControl(以下简称CC)自带ant1.6.3;文档在docs目录下,这里面包括config.xml的相关的参数设置说明;logs下面包括日志信息,可以通过在config.xml中指定日志路径和名称;projects下面放的是需要进行持续集成的项目,jarkarta-commons是使用apache的math项目作例子;lib目录中放有cruisecontrol.jar和其他运行需要的jar;webapps下是cruisecontrol build结果的网站,可以通过访问 http://127.0.0.1:8080/cruisecontrol 来查看build的结果;在build后会产生artifacts目录,这个目录用来存放发布的工件。

  2. 使用cruisecontrol前的准备工作
    1. 建立CVS管理项目源码

        建议最好使用CVS管理源码,好处在这里就勿需多言了。具体创建的过程可以参考相关的《CVS使用手册》,这里需要注意的是module的设置,可以参照相应的文档来设置。

    2. 设置ANT环境变量

        ANT的使用也不是本篇所要阐述的,在这里只是说一些可能碰到的情况。在按照ANT的使用指南配置好后,可以在其他环境下试一下是否好用,如果你的JDK比较新的话最好也用比较新的ant,这里使用的是CC自带的ant,本文的环境是JDK5.0+Ant1.6.3+Eclipse3.1+Tomcat5.5,OS:WinXP SP2

    3. 编写项目的build.xml

        接下来用需要编写的是ant的build.xml文件,在本文中,我编写了这样的一个例子,为了便于理解,target都采用了中文,接下来我们会看到。另外,在编写build文件的时候,我还发现一个问题,我编写的build文件怎么也不好用,只要一Run as ant,就会报异常,而在命令提示符下运行ant则没有这个问题,经过一段时间检查,发现原来是Eclipse所带的ant版本比较低,后来下载新的ant后没有更新eclipse的ant目录,需要进行如下的设置:

      编写项目的build.xml

    4. Checkout项目到CC_HOME/projects目录

        配置好CVSROOT后,在CC_HOME/projects下执行$ cvs checkout module_name 具体的配置方法在这里不说了。这是需要手工作的,否则CC是不会自动监测变更的。

    5. 修改config.xml

        根据实际项目的情况修改config.xml的情况,我们下面会用一个例子来说明。

  3. 运行cruisecontrol

      在作完上面的工作后,我们就可以启动CC了,如果是在unix平台下需要执行

      $ CC_HOME/ cruisecontrol.sh ;如果是在windows平台下执行cruisecontrol.bat,成功后会出现如下的界面:

      屏幕上出现Project commons-math started和BuildQueue started提示就说明已经正确的执行了CC。

    运行cruisecontrol

      在执行后,我们可以通过IE查看build情况,界面如下:

      下面显示的是build的结果,现在的结果是BUILD FAILED,因为写这篇文档时网络不通,所以无法连接到apache上获得程序进行编译,就出现了错误。

    通过IE查看build情况

    通过IE查看build情况

      我们可以看到,CC还提供了RSS订阅的功能,借助RSS阅读器,我们可以方便的获得最新的构建信息。界面如下:

    可以方便的获得最新的构建信息

      好,我们见过了CC的使用过程,下面让我们通过一个例子来实现这个过程。

  4. 例子

      在这个例子中,我们新建了一个项目,项目的名字叫hello,项目的结构如下:

    例子

      main/src/java/com/test/qik/HelloMaven.java:示例的程序

    package com.test.qik;public class HelloMaven {		public static boolean main(String[] args) {		System.out.println("Hello, maven!");		return true;	}		public void testa() throws Exception {				System.out.println("test,可以发布到生产库的版本");			}}main/test/java/com/test/qik/HelloMavenTest.java:示例程序的单元测试用例package com.test.qik;import junit.framework.TestCase;public class HelloMavenTest extends TestCase {	public static void main(String[] args) {	}	public HelloMavenTest(String arg0) {		super(arg0);	}	protected void setUp() throws Exception {		super.setUp();	}	protected void tearDown() throws Exception {		super.tearDown();	}	/*	 * Test method for 'com.test.qik.HelloMaven.main(String[])'	 */	public void testMain() {		HelloMaven hm = new HelloMaven();		assertEquals(hm.main(null),true);	}}target/:输出路径build.xml:ant的构建文件文件内容如下:==============================================================
        
        
        
        	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         		
          
          
           
           正在删除源程序目录...
          
          		
          
          		
          
          
           
           正在创建源程序目录...
          
          		
          
          		
          
          
           
           正在删除测试程序目录...
          
          		
          
          		
          
          
           
           正在创建测试程序目录...
          
          		
          
          		
          
          
           
           正在删除编译程序目录...
          
          		
          
          		
          
          
           
           正在创建编译程序目录...
          
          		
          
          		
          
          
           
           正在删除lib目录...
          
          		
          
          		
          
          
           
           正在创建lib目录...
          
          		
          
          		
          
          
           
           正在删除单元测试报告目录...
          
          		
          
          		
          
          
           
           正在创建单元测试报告目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           从CVS中获取源码...
          
          		
          
          	
         
         	
         
         		
          
          
           
           从CVS中获取lib目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           编译程序...
          
          		
          
          			
           
           			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           运行单元测试用例...
          
          		
          
          			
           
           			
           
           			
           
           				
            
            					
             
             					
             
             				
            
            			
           
           		
          
          		
          
          
           
           生成单元测试报告...
          
          		
          
          			
           
           				
            
            			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           发送测试报告邮件...
          
          		
          
          			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           打包成jar文件...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         	
         
         		
          
          			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         
        
        ==============================================================对config.xml设置的内容
        
          
         
               
          
               
           
              
          
                
          
               
           
              
          
             
          
             
          
           
           
                
           
                
           
              
          
             
          
             
          
               
           
           
           
              
          
                
          
             	
           
              
          
          
          
                
          
             	
           
              
          
          
          
               
         
         
        
        CC_HOME/docs/main/configxml.html这个文件是config.xml的帮助内容,我们可以从这里面找到所有的配置。
  5. 总结

      我们可以看到整个过程还是很简单的,通过CC,我们可以部分减轻CI的工作量,但可以看到核心的构建工作还是在project的build.xml中,如果CC能提供常见的模版就更好了(呵呵,我还是想偷懒)。另外CC的监控本地工作目录的功能有些弱智,比如我只写了"projects/hello",则它只认为在”project/hello”目录下的文件有更新才启动build过程,如果我们更新的是下面的子目录,则不能自动监控。

     



  最近一段时间一直对CI工具非常关注,正好前两天终于有点时间,把这个好好用了一下,所以写了这篇文档。最新版本为3.0,可以从http://cruisecontrol.sourceforge.net/下载.

  1. 要想用得先下载,地址就不提了,占地儿。我下载的是最新版本cruisecontrol-bin-2.3.1.zip,如果不是研究的话,建议最好下载一个bin包,这样能省去很多麻烦。解压后我们能看到一些目录。

    最新版本cruisecontrol-bin-2.3.1.zip

      其中CruiseControl(以下简称CC)自带ant1.6.3;文档在docs目录下,这里面包括config.xml的相关的参数设置说明;logs下面包括日志信息,可以通过在config.xml中指定日志路径和名称;projects下面放的是需要进行持续集成的项目,jarkarta-commons是使用apache的math项目作例子;lib目录中放有cruisecontrol.jar和其他运行需要的jar;webapps下是cruisecontrol build结果的网站,可以通过访问 http://127.0.0.1:8080/cruisecontrol 来查看build的结果;在build后会产生artifacts目录,这个目录用来存放发布的工件。

  2. 使用cruisecontrol前的准备工作
    1. 建立CVS管理项目源码

        建议最好使用CVS管理源码,好处在这里就勿需多言了。具体创建的过程可以参考相关的《CVS使用手册》,这里需要注意的是module的设置,可以参照相应的文档来设置。

    2. 设置ANT环境变量

        ANT的使用也不是本篇所要阐述的,在这里只是说一些可能碰到的情况。在按照ANT的使用指南配置好后,可以在其他环境下试一下是否好用,如果你的JDK比较新的话最好也用比较新的ant,这里使用的是CC自带的ant,本文的环境是JDK5.0+Ant1.6.3+Eclipse3.1+Tomcat5.5,OS:WinXP SP2

    3. 编写项目的build.xml

        接下来用需要编写的是ant的build.xml文件,在本文中,我编写了这样的一个例子,为了便于理解,target都采用了中文,接下来我们会看到。另外,在编写build文件的时候,我还发现一个问题,我编写的build文件怎么也不好用,只要一Run as ant,就会报异常,而在命令提示符下运行ant则没有这个问题,经过一段时间检查,发现原来是Eclipse所带的ant版本比较低,后来下载新的ant后没有更新eclipse的ant目录,需要进行如下的设置:

      编写项目的build.xml

    4. Checkout项目到CC_HOME/projects目录

        配置好CVSROOT后,在CC_HOME/projects下执行$ cvs checkout module_name 具体的配置方法在这里不说了。这是需要手工作的,否则CC是不会自动监测变更的。

    5. 修改config.xml

        根据实际项目的情况修改config.xml的情况,我们下面会用一个例子来说明。

  3. 运行cruisecontrol

      在作完上面的工作后,我们就可以启动CC了,如果是在unix平台下需要执行

      $ CC_HOME/ cruisecontrol.sh ;如果是在windows平台下执行cruisecontrol.bat,成功后会出现如下的界面:

      屏幕上出现Project commons-math started和BuildQueue started提示就说明已经正确的执行了CC。

    运行cruisecontrol

      在执行后,我们可以通过IE查看build情况,界面如下:

      下面显示的是build的结果,现在的结果是BUILD FAILED,因为写这篇文档时网络不通,所以无法连接到apache上获得程序进行编译,就出现了错误。

    通过IE查看build情况

    通过IE查看build情况

      我们可以看到,CC还提供了RSS订阅的功能,借助RSS阅读器,我们可以方便的获得最新的构建信息。界面如下:

    可以方便的获得最新的构建信息

      好,我们见过了CC的使用过程,下面让我们通过一个例子来实现这个过程。

  4. 例子

      在这个例子中,我们新建了一个项目,项目的名字叫hello,项目的结构如下:

    例子

      main/src/java/com/test/qik/HelloMaven.java:示例的程序

    package com.test.qik;public class HelloMaven {		public static boolean main(String[] args) {		System.out.println("Hello, maven!");		return true;	}		public void testa() throws Exception {				System.out.println("test,可以发布到生产库的版本");			}}main/test/java/com/test/qik/HelloMavenTest.java:示例程序的单元测试用例package com.test.qik;import junit.framework.TestCase;public class HelloMavenTest extends TestCase {	public static void main(String[] args) {	}	public HelloMavenTest(String arg0) {		super(arg0);	}	protected void setUp() throws Exception {		super.setUp();	}	protected void tearDown() throws Exception {		super.tearDown();	}	/*	 * Test method for 'com.test.qik.HelloMaven.main(String[])'	 */	public void testMain() {		HelloMaven hm = new HelloMaven();		assertEquals(hm.main(null),true);	}}target/:输出路径build.xml:ant的构建文件文件内容如下:==============================================================
        
        
        
        	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         		
          
          
           
           正在删除源程序目录...
          
          		
          
          		
          
          
           
           正在创建源程序目录...
          
          		
          
          		
          
          
           
           正在删除测试程序目录...
          
          		
          
          		
          
          
           
           正在创建测试程序目录...
          
          		
          
          		
          
          
           
           正在删除编译程序目录...
          
          		
          
          		
          
          
           
           正在创建编译程序目录...
          
          		
          
          		
          
          
           
           正在删除lib目录...
          
          		
          
          		
          
          
           
           正在创建lib目录...
          
          		
          
          		
          
          
           
           正在删除单元测试报告目录...
          
          		
          
          		
          
          
           
           正在创建单元测试报告目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           从CVS中获取源码...
          
          		
          
          	
         
         	
         
         		
          
          
           
           从CVS中获取lib目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           编译程序...
          
          		
          
          			
           
           			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           运行单元测试用例...
          
          		
          
          			
           
           			
           
           			
           
           				
            
            					
             
             					
             
             				
            
            			
           
           		
          
          		
          
          
           
           生成单元测试报告...
          
          		
          
          			
           
           				
            
            			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           发送测试报告邮件...
          
          		
          
          			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           打包成jar文件...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         	
         
         		
          
          			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         
        
        ==============================================================对config.xml设置的内容
        
          
         
               
          
               
           
              
          
                
          
               
           
              
          
             
          
             
          
           
           
                
           
                
           
              
          
             
          
             
          
               
           
           
           
              
          
                
          
             	
           
              
          
          
          
                
          
             	
           
              
          
          
          
               
         
         
        
        CC_HOME/docs/main/configxml.html这个文件是config.xml的帮助内容,我们可以从这里面找到所有的配置。
  5. 总结

      我们可以看到整个过程还是很简单的,通过CC,我们可以部分减轻CI的工作量,但可以看到核心的构建工作还是在project的build.xml中,如果CC能提供常见的模版就更好了(呵呵,我还是想偷懒)。另外CC的监控本地工作目录的功能有些弱智,比如我只写了"projects/hello",则它只认为在”project/hello”目录下的文件有更新才启动build过程,如果我们更新的是下面的子目录,则不能自动监控。

     



  最近一段时间一直对CI工具非常关注,正好前两天终于有点时间,把这个好好用了一下,所以写了这篇文档。最新版本为3.0,可以从http://cruisecontrol.sourceforge.net/下载.

  1. 要想用得先下载,地址就不提了,占地儿。我下载的是最新版本cruisecontrol-bin-2.3.1.zip,如果不是研究的话,建议最好下载一个bin包,这样能省去很多麻烦。解压后我们能看到一些目录。

    最新版本cruisecontrol-bin-2.3.1.zip

      其中CruiseControl(以下简称CC)自带ant1.6.3;文档在docs目录下,这里面包括config.xml的相关的参数设置说明;logs下面包括日志信息,可以通过在config.xml中指定日志路径和名称;projects下面放的是需要进行持续集成的项目,jarkarta-commons是使用apache的math项目作例子;lib目录中放有cruisecontrol.jar和其他运行需要的jar;webapps下是cruisecontrol build结果的网站,可以通过访问 http://127.0.0.1:8080/cruisecontrol 来查看build的结果;在build后会产生artifacts目录,这个目录用来存放发布的工件。

  2. 使用cruisecontrol前的准备工作
    1. 建立CVS管理项目源码

        建议最好使用CVS管理源码,好处在这里就勿需多言了。具体创建的过程可以参考相关的《CVS使用手册》,这里需要注意的是module的设置,可以参照相应的文档来设置。

    2. 设置ANT环境变量

        ANT的使用也不是本篇所要阐述的,在这里只是说一些可能碰到的情况。在按照ANT的使用指南配置好后,可以在其他环境下试一下是否好用,如果你的JDK比较新的话最好也用比较新的ant,这里使用的是CC自带的ant,本文的环境是JDK5.0+Ant1.6.3+Eclipse3.1+Tomcat5.5,OS:WinXP SP2

    3. 编写项目的build.xml

        接下来用需要编写的是ant的build.xml文件,在本文中,我编写了这样的一个例子,为了便于理解,target都采用了中文,接下来我们会看到。另外,在编写build文件的时候,我还发现一个问题,我编写的build文件怎么也不好用,只要一Run as ant,就会报异常,而在命令提示符下运行ant则没有这个问题,经过一段时间检查,发现原来是Eclipse所带的ant版本比较低,后来下载新的ant后没有更新eclipse的ant目录,需要进行如下的设置:

      编写项目的build.xml

    4. Checkout项目到CC_HOME/projects目录

        配置好CVSROOT后,在CC_HOME/projects下执行$ cvs checkout module_name 具体的配置方法在这里不说了。这是需要手工作的,否则CC是不会自动监测变更的。

    5. 修改config.xml

        根据实际项目的情况修改config.xml的情况,我们下面会用一个例子来说明。

  3. 运行cruisecontrol

      在作完上面的工作后,我们就可以启动CC了,如果是在unix平台下需要执行

      $ CC_HOME/ cruisecontrol.sh ;如果是在windows平台下执行cruisecontrol.bat,成功后会出现如下的界面:

      屏幕上出现Project commons-math started和BuildQueue started提示就说明已经正确的执行了CC。

    运行cruisecontrol

      在执行后,我们可以通过IE查看build情况,界面如下:

      下面显示的是build的结果,现在的结果是BUILD FAILED,因为写这篇文档时网络不通,所以无法连接到apache上获得程序进行编译,就出现了错误。

    通过IE查看build情况

    通过IE查看build情况

      我们可以看到,CC还提供了RSS订阅的功能,借助RSS阅读器,我们可以方便的获得最新的构建信息。界面如下:

    可以方便的获得最新的构建信息

      好,我们见过了CC的使用过程,下面让我们通过一个例子来实现这个过程。

  4. 例子

      在这个例子中,我们新建了一个项目,项目的名字叫hello,项目的结构如下:

    例子

      main/src/java/com/test/qik/HelloMaven.java:示例的程序

    package com.test.qik;public class HelloMaven {		public static boolean main(String[] args) {		System.out.println("Hello, maven!");		return true;	}		public void testa() throws Exception {				System.out.println("test,可以发布到生产库的版本");			}}main/test/java/com/test/qik/HelloMavenTest.java:示例程序的单元测试用例package com.test.qik;import junit.framework.TestCase;public class HelloMavenTest extends TestCase {	public static void main(String[] args) {	}	public HelloMavenTest(String arg0) {		super(arg0);	}	protected void setUp() throws Exception {		super.setUp();	}	protected void tearDown() throws Exception {		super.tearDown();	}	/*	 * Test method for 'com.test.qik.HelloMaven.main(String[])'	 */	public void testMain() {		HelloMaven hm = new HelloMaven();		assertEquals(hm.main(null),true);	}}target/:输出路径build.xml:ant的构建文件文件内容如下:==============================================================
        
        
        
        	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         	
         
         		
          
          
           
           正在删除源程序目录...
          
          		
          
          		
          
          
           
           正在创建源程序目录...
          
          		
          
          		
          
          
           
           正在删除测试程序目录...
          
          		
          
          		
          
          
           
           正在创建测试程序目录...
          
          		
          
          		
          
          
           
           正在删除编译程序目录...
          
          		
          
          		
          
          
           
           正在创建编译程序目录...
          
          		
          
          		
          
          
           
           正在删除lib目录...
          
          		
          
          		
          
          
           
           正在创建lib目录...
          
          		
          
          		
          
          
           
           正在删除单元测试报告目录...
          
          		
          
          		
          
          
           
           正在创建单元测试报告目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           从CVS中获取源码...
          
          		
          
          	
         
         	
         
         		
          
          
           
           从CVS中获取lib目录...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          
           
           编译程序...
          
          		
          
          			
           
           			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           运行单元测试用例...
          
          		
          
          			
           
           			
           
           			
           
           				
            
            					
             
             					
             
             				
            
            			
           
           		
          
          		
          
          
           
           生成单元测试报告...
          
          		
          
          			
           
           				
            
            			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           发送测试报告邮件...
          
          		
          
          			
           
           			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          
           
           打包成jar文件...
          
          		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         	
         
         		
          
          			
           
           		
          
          	
         
         	
         
         	
         
         		
          
          		
          
          	
         
         
        
        ==============================================================对config.xml设置的内容
        
          
         
               
          
               
           
              
          
                
          
               
           
              
          
             
          
             
          
           
           
                
           
                
           
              
          
             
          
             
          
               
           
           
           
              
          
                
          
             	
           
              
          
          
          
                
          
             	
           
              
          
          
          
               
         
         
        
        CC_HOME/docs/main/configxml.html这个文件是config.xml的帮助内容,我们可以从这里面找到所有的配置。
  5. 总结

      我们可以看到整个过程还是很简单的,通过CC,我们可以部分减轻CI的工作量,但可以看到核心的构建工作还是在project的build.xml中,如果CC能提供常见的模版就更好了(呵呵,我还是想偷懒)。另外CC的监控本地工作目录的功能有些弱智,比如我只写了"projects/hello",则它只认为在”project/hello”目录下的文件有更新才启动build过程,如果我们更新的是下面的子目录,则不能自动监控。

     



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值