对maven的介绍和使用在上周写的几篇文章中都有详细的介绍,这里不再赘余了。这里重点谈下SubVersion(SVN)和CruiseControl(CC)在持续集成中的使用。(老鸟请飞过...)

       先谈下持续集成。在没有应用持续集成之前,传统的开发模式是项目一开始就划分模块,然后等所有的代码都开发完成之后再集成到一起进行测试,随着软件技术的发展,各种软件方法百花齐放,软件规模也在扩大,软件需求越来越复杂,软件已经不能简单地通过划分模块的方式来开发,需要项目内部互相合作,划分模块这种传统的模式的弊端也越来越明显,由于很多 bug 在项目的早期就存在,到最后集成的时候才发现问题,开发者需要在集成阶段花费大量的时间来寻找 bug 的根源,加上软件的复杂性,问题的根源很难定位,甚至出现不得不调整底层架构的情况。

       持续集成最大的优点是可以避免这种传统模式在集成阶段的除虫会议。持续集成主张项目的开发人员频繁的将他们对源码的修改提交(check in)到一个单一的源码库,并验证这些改变是否对项目带来了破坏,持续集成包括以下几大要点:

      1,访问单一源码库,将所有的源代码保存在单一的地点(源码控制系统), 让所有人都能从这里获取最新的源代码(以及以前的版本)。

     2 支持自动化创建脚本,使 创建过程完全自动化,让任何人都可以只输入一条命令就完成系统的创建。

     3 测试完全自动化,要求开发人员提供自测试的代码,让任何人都可以只输入一条命令就运行一套完整的系统测试。

     4 提供主创建,让任何人都可以只输入一条命令就可以开始主创建。

      5 提倡开发人员频繁的提交(check in)修改过的代码。

         持续集成的关键是完全的自动化,读取源代码、编译、连接、测试,整个创建过程都应该自动完成。对于一次成功的创建,要求在这个自动化过程中的每一步都不能出错,而最重要的一步是测试,只有最后通过测试的创建才是成功的创建。

       CruiseControl 是一种持续集成过程的框架,包括了邮件通知、旺旺提醒(淘宝内部)、ant、maven和各种源码控制工具cvs、svn的插件,并提供了 web 接口,用于查看当前和以前的创建的结果。

  • 一, SVN服务器的安装

Svn包的下载http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100,目前最高版本为svn-win32-1.5.5.zip,下载后解压并将bin目录配置到环境变量里,如:Path=D:dev filessvn-win32-1.5.5bin

检验配置正确与否:在控制台下输入命令 svn help,若出现帮助信息则表示配置成功。 

  • 二, SVN客户端TortoiseSVN的安装

可以去官网下载TortoiseSVN:http://tortoisesvn.net/downloads ,目前版本win32-svn-1.5.6.msi,下载后安装。

  • 三, Cruisecontrol 的安装

可以去官网下载CC:http://cruisecontrol.sourceforge.net/download.html

目前的版本是2.8.2,下载后安装。

  • 四, eclipse中的subversion的安装:

启动eclipse,选择help->software updates->Available software->add site->输入http://subclipse.tigris.org/update_1.4.x/,然后选中并Install,安装完后重启,在项目名右键将会看到svn插件的相关功能菜单,如team等。

如果上面的安装都已完成,下面将结合一个实例将一个项目集成在cc环境中。

  • 1, 建立版本库。在你选定的目录空白处右键->TortoiseSVN->Create Repository here...", 然后可以选择版本库模式, 使用默认即可, 然后就创建了一系列目录和文件,如D:SVN_repository。
  • 2, 配置用户和权限。进入版本库里conf文件夹,先修改svnserve.conf文件里# password-db = passwd为password-db = passwd,使用权限保护,同时修改passwd文件里

                               # [users]  

                              # harry = harryssecret

                              # sally = sallyssecret

                             修改为:
                             [users]
                            harry = harryssecret
                            sally = sallyssecret    ,或者设置你自己的用户名和密码,如guangyuan = guangyuan
  • 3, 建立分支trunk。在命令行中输入svnserve -d -r D:SVN_repository启动SVN服务器,不要关闭命令行窗口,关闭窗口也会把svnserve停止。在地址栏输入svn://localhost/后回车,将会出现:
         createtrunk1

在文件夹下创建自己的分支目录。

  • 4, 将项目导入到SVN库中。为了简单起见,我用maven构建了一个最原始的five-stone项目:
                        mvn archetype:create -DgroupId=com.taobao.mytest -DartifactId=fives-tone
                        mvn -U clean eclipse:clean eclipse:eclipse
                        然后在项目目录的空白处右键-> TortoiseSVN->import,然后选择你的分支url,确定即可导入到版本库中。
  • 5, 将项目集成到CC环境中。在CruiseControl安装目录下的projects目录空白处右键->SVN CheckOut,选择刚才的项目分支URL即可checkout five-stone项目代码。
                编辑config.xml:
                为了让配置文件对中文支持,先在第一行增加
                             <?xml version="1.0" encoding="UTF-8"?>
                              <!-旺旺消息提醒成功与否的插件,-->
                              <plugin name=
                                         "wangwangCCPlugin" classname="com.taobao.util.cctool.WangwangPublisher"
                                         ccUrl="http://localhost:8080/cruisecontrol/buildresults/${project.name}">
                             </plugin>
                         <project name="fives-tone">
                                           <listeners>
                                                   <currentbuildstatuslistener file="logs/${project.name}/status.txt"/>
                                           </listeners>
                                           <bootstrappers>
                                                         <svnbootstrapper localWorkingCopy="projects/${project.name}" />
                                             </bootstrappers>
                                             <modificationset quietperiod="30">
                                                        <svn localWorkingCopy="projects/${project.name}"/>          
                                             </modificationset>
                                            <schedule interval="300">  
                                                          <maven2 mvnscript=
                                                                  "D:/dev files/apache-maven-2.0.9-bin/apache-maven-2.0.9/bin/mvn.bat"  
                                                             pomfile="projects/${project.name}/pom.xml"  
                                                             goal="-U clean test"    />
                                             </schedule>  
                                             <log >
                                                     <merge dir="projects/${project.name}/target/test-results"/>
                                           </log>
                                           <publishers>    
                                                      <onsuccess>
                                                                 <artifactspublisher dest="artifacts/${project.name}"
                                                                                file="projects/${project.name}/target/${project.name}.jar"/>
                                                                 <wangwangCCPlugin>
                                                                               <always nickname="光远" />
                                                               </wangwangCCPlugin>
                                                   </onsuccess>
                                      </publishers>
                             </project>
  • 6, CC创建项目。启动cruisecontrol.bat,将会自动构建five-stone项目并生成相关的日志记录。访问http://localhost:8080/cruisecontrol/会看到CC的首页面,页面说明了项目构建的时间、是否成功和构建的标号。还可以通过手动点击Build按钮让CC立即执行构建任务。否则CC会等待下一次构建时间(在config.xml中,schedule的属性interval的值以秒为单位设定构建执行的间隔时间,默认为5分钟)
    点击 项目名可以查看项目构建细节。旺旺消息通知结果的插件是宋缺结合CC的源码开发出来的一个插件,它会在项目构建完后通过旺旺消息将构建结果发送到指定的人,便于及时的跟进。关于CC的config.xml里的其他配置,有兴趣的可以继续研究,这里不做细节介绍。
  • 7, 测试。先模拟客户端的操作将项目checkout出来,结合maven命令构建后导入到eclipse环境,进入AppTest.java里将代码assertTrue(true)改为assertTrue(false),然后保存,右键->team->提交。进入CC页面http://localhost:8080/cruisecontrol/,重新build该项目,当项目构建完后,你将收到旺旺提醒的构建结果错误的提示。
 
以上,谢谢!