John Jiang

a cup of Java, cheers!
https://github.com/johnshajiang/blog

   :: 首页 ::  :: 联系 :: 聚合  :: 管理 ::
  131 随笔 :: 1 文章 :: 530 评论 :: 0 Trackbacks
Continuum入门--实例
    本文虽然是Continuum的入门,但并不涉及Continuum的历史、下载与安装,这些内容可以到 Continuum的官方网站 (http://maven.apache.org/continuum/) 上了解。本文主要是以一个实例来阐述使用 Continuum的基本方法,而其中将使用的Maven工程是《Maven入门--概念与实例》中的实例(该文末有下载链接)。
注:转载时请注明原作者(jiangshachina)及出处(http://www.blogjava.net/jiangshachina)!

1 使用持续集成的好处
1.1 较早提交,经常提交
    当开发者有规律性地提交文件时,持续集成将是最高效的。这就是意味着,不能提交不完全的代码,而是保持每次的改动不大,并且有很好的测试。这就可以更好地发现代码中的错误。
1.2 尽可能频繁的构建
    频繁的Build可能要受到需要进行Build的工作量,以及进行Build工作的机器的性能的影响。但频繁的Build确实可以在开发人员转移注意力之前,尽可能早的发现错误。任何时候,任何一个提交的发生,Continuum都可以触发一个Build工作。这就意味着,这些Build工作应该更快,对于大量的Build工作或性能测试
1.3 创建一个稳定的环境
    如果该Build不是其它开发,测试或产品环境中的一员,那么就可以避免定制JDK或其它的本地设置。如果在持续集成环境中,一个Build工作失败了,它会被从引起它的原因的修改中隔离出来,可以独立于运行环境来被使用。
1.4 运行干净的构建
    快速、重复地构建是十分有用的,同样重要的是,不会由于旧的Build状态而发生失败的Build工作。有规律的考虑问题,就能得到干净的构建。Continuum默认就是进行干净的Build工作,未来它还可以允许开发者根据所选的时间表去请求一个初始的checkout。
2 实例
2.1 构想
    本实例中需要持续集成的Maven工程是《Maven入门--概念与实例》中的Demo。使用的SCM是Subversion,即假定已经安装好了Subversion服务器和命令行客户端。我们的目标是使用Continuum对Maven工程demo(包括它的子工程)进行定时的持续集成。在本文的环境中有如下路径:
    Continuum_Home=D:\continuum
    SVN_Repoitory=E:\svn-repo\repository
    Maven_Demo=D:\maven\demo
    Continuum_Maven=D:\maven\continuum
  // 该目录存放从Subversion下载的Maven Demo工程
2.2 初始化Subversion仓库
    生成仓库:svnadmin create SVN_Repository
    将Maven_Demo中的文件导入到仓库:
        svn import Maven_Demo file:///SVN_Repoitory/demo -m "initial import demo"
    重新下载仓库中的文件(在目录Continuum_Maven中运行如下命令):
        svn checkout file:///SVN_Repoitory/demo demo
2.3 启动Continuum
    假设此时已经安装了Continuum,但还没有运行它。要运行Continuum,可以双击Continuum_Home\bin\win32\run.bat文件。对于第一次运行,会报一些错误:
……
WARN  RDBMS - Error initialising derby schema : Schema 'SA' does not exist
ERROR 42Y07: Schema 'SA' does not exist
……
这种情况是正常的,因为Continuum后台使用的是Apache Derby数据库,在第一次运行之前,Continuum所需要的一些表和数据并不存在。但Continuum会初始化这些数据,当第2次启动Continuum时,这些错误就不会出现了。
    Continuum服务器默认使用8080端口,如果之前该端口已被占用了,那么启动将失败。为了解决这个问题,我们需要修改jar文件Continuum_Home\apps\continuum-plexus-application-1.0.3.jar中的\conf\application.xml文件。在该文件中查找8080(该值是唯一的),将改它为你所指定的端口值,本文是使用8081。经过上述过程后,Continuum服务器应该就可以正常启动了。下面将讨论Continuum的初始化配置。
2.4 初始化配置
    在浏览器中使用地址http://localhost:8081/continuum登录Continuum控制台界面,如下图所示。
Continuum01.gif
第一次登录Continuum后,需要进行一些配置。主要包括用户名/密码,工作区目录,Build输出目录以及公司信息。主要参数值如下所示:
    Working Directory=D:\continuum\workspace 
    Build Output Directory=D:\continuum\workspace\output
    Base URL=http://localhost:8081/continuum/servlet/continuum
    // 这里的Company信息就借用此Blog站点的信息吧 *_*
    Company Name=BlogJava
    Company Logo=http://www.blogjava.net/images/logo.gif
    Company URL=http://www.blogjava.net/
 
提交之后会出现如下画面(能够看到BlogJava的logo吗 *_*)
Continuum02.gif
使用初始配置时设置的用户名及密码,就可以登录Continuum控制台了。
2.5 修改POM文件
    在目录Continuum_Maven中执行如下命令,将Maven工程demo重新下载一次
        svn checkout file:///SVN_Repository/demo demo
为了能被Continuum使用,且能与Subversion进行配合,需要对原来Maven工程中的POM文件进行修改。在每个POM中加入如下形式的语句:
<project>
  ……
  
<ciManagement>
      
<system>Continuum</system>
      
<url>http://localhost:8081/continuum/servlet/continuum</url>
    
<notifiers>
        
<notifier>
          
<type>mail</type>
        
<address>jiangshachina@163.com</address>
      
</notifier>
    
</notifiers>
  
</ciManagement>
   
  
<scm>
    
<connection>scm:svn:file://localhost/SVN_Repository/ProjectName</connection>
  
</scm>
  ……
</project>
其中ProjectName要与POM当前所在工程名一致,如对于demo目录中的POM,ProjectName就是demo。这三个文件修改完毕之后,将它们都提交到Subversion服务器中,在各个POM的当前目录下执行命令:
    svn commit pom.xml -m "my settings"
为了每个工程都可以被单独地运行,需要将整个demo及其子工程都安装到Maven仓库中,仅需要在Maven_Demo
目录下执行命令:
    mvn install
2.6 添加Maven工程
    登录到Continuum控制台后,点击左边“Add Project”组中的“Maven 2.0+ Project”。添加Maven2工程有两种情况:输入POM文件的URL;直接上传POM文件。前者适用于任何Maven工程;后者只能适用于没有module,即无子工程的Maven工程。由于本文使用的Maven工程demo中有两个子工程,所以只能使用前一种方法。
Continuum03.gif
    只需要加载顶层工程的POM文件,Continuum会自动加载其它moudel的POM文件。如上图所示,在M2 POM Url中输入:
        file:///D:/maven/continuum/Demo/pom.xml

提交之后会看到如下的画面,即表示Maven工程已经被正确地加载到Continuum中了。
Continuum04.gif
    加载工程时,Continuum会将这些工程分别下载到Working Directory(见2.4节)中,并在
Build Output Directory(见2.4节)中为每个工程 生成一个输出目录(开始只有一些log文件)。细心的朋友可能会发现,当上述工作完成之后,子工程“CE Maven Demo – App”和“CE Maven Demo – WebApp”的Build状态仍然是“Queued Build”。其实这是Continuum的一个Bug!Continnum在许多情况下不会自动刷新页面,需要手动刷新,即点击“Show projects”按钮。但请不要使用浏览器中的refresh按钮,这样可能会重新提交你的请求。这个Bug将在Continuum1.1中被修复。当页面刷新之后,App和WebApp的Build状态将与Demo工程一致。
2.7 第一次Build
    要Build任何一个Maven工程都十分简单,只需要点击某个工程右边“Build Now”按钮就可以Build该工程了。如我们点击demo工程对应的“Build Now”按钮,那么Continuum将按照demo中的POM文件执行Build工作。当Build完成后,可以显示本次Build的结果状态:成功,失败或错误(但请随时手动刷新页面^_^)。而Build次数也将从0改变为1。
Continuum09.gif
    点击上图表格中的列“Build”中的数字,将可以看到本次Build的详细过程,如下图所示。
continuum10.gif
2.8 设置时间表
    前面已经谈过,持续集成就需要进行有规律的Build。即需要建立一个时间表,让持续集成服务器按照这个表进行Build。Continuum默认的时间表为:每天的每一个整点进行一次Build,即每天每隔一小时Build一次。我们也可以建立自己的时间表。点击Administration组中的“Schedules”按钮就可以发现当前默认使用的时间表,再点击“Add”按钮就可以添加新的时间表了,如下图所示。
Continuum06.gif
    这些参数项中最关键的是Cron Expression,它定义了Continuum执行Build的时间规则,它的语法规则请见参加资源[4]。上图中规定的时间表是:在每天的14:00-14:59之间,每分钟都要进行一次Build。勾选上Enable复选框之后,再提交,该Schedule就可以被使用了。
    为了使用新建的Schedule,我们需要进入工程视图页面。点击“Show Projects”-->工程名(如CE Maven Demo),就可以看到该工程的详细信息,如下图所示。
Continuum07.gif
    在工程视图的Build Definitions项的Goals中可以发现,使用的Schedule就是“DEFAULT_SCHEDULE”时间表。再点击“Add”按钮,并在Schedule下拉列表框中,请选择刚刚新建的“My First Schedule”时间表(如下图所示),最后再提交后,新的时间表将被采用。
Continuum08.gif
4 小结
    根据前面的描述,应该可以对Continuum的使用有些感性上的认识了。由于Continuum是Maven的子项目,它内置支持Maven2,所以能够与Maven进行良好的集成使用。现时,Continuum也能够支持Ant与Shell脚本工程。使用Continuum+Maven,能够对工程进行干净与频繁的集成,可以提高Build效率并能促进工程的健康发展。
5 参数资源
[1]Continuum官方网站. http://maven.apache.org/continuum/
[2]Continuum的参考文档. http://maven.apache.org/continuum/guides/index.html
[3]Better Build with Maven. http://www.mergere.com/m2book_download.jsp
[4]Cron Expression语法规则. http://www.opensymphony.com/quartz/api/org/quartz/CronTrigger.html
posted on 2006-09-09 11:32 John Jiang 阅读(6047) 评论(10)  编辑  收藏 所属分类: Maven原创

评论

# re: Continuum入门--实例 2006-11-30 09:41 zhengoodman
辛苦了,这正是我所需要的。感谢作者能分享自己的经验。  回复  更多评论
  

# re: Continuum入门--实例 2006-12-01 08:52 Sha Jiang
使用Continuum持续集成Maven确实十分方便,几分钟就可以成功。
但在实际的工作中,我是使用CruiseControl对Maven工程进行持续集成。
没办法,CC的人气太旺了,公司要求用它 :D
而且从功能上而言,CC仍然还是最好的,而且配置起来也不难。所以可能在较长的时间内,仍然是一种很好的选择。  回复  更多评论
  

# re: Continuum入门--实例 2006-12-04 08:41 zhengoodman
有没有像Appfuse的ant配置文件那样的大型项目的maven2配置文件?现在网上关于maven2的都是些基本的操作。不知道有没有实际一点的例子?  回复  更多评论
  

# re: Continuum入门--实例 2006-12-04 20:06 Sha Jiang
Maven应该目前并不流行,所以也没看到很好的样例。
我使用Maven也只是一些最的一段时间,目前使用的项目也不大。  回复  更多评论
  

# re: Continuum入门--实例 2006-12-05 08:42 zhengoodman
非常感谢,以后还请多多关照。  回复  更多评论
  

# re: Continuum入门--实例 2006-12-06 13:11 Sha Jiang
有问题,可以发邮件给我。
jiangshachina@163.com
jiangshachina@gmail.com
这两个邮箱,我每天都会打开多次 ^_^

我也只是Maven的初学者,大家一起讨论,一起进步嘛 :D  回复  更多评论
  

# re: Continuum入门--实例 2007-06-28 16:56 sitinspring
好,先做个记号,有时间准备从马恩往Continuun转。  回复  更多评论
  

# re: Continuum入门--实例 2007-06-28 16:58 sitinspring
不知你是否用过Maven的Eclipse plugin,有时间能否谈谈?  回复  更多评论
  

# re: Continuum入门--实例 2007-06-29 08:40 Sha Jiang
> 好,先做个记号,有时间准备从马恩往Continuun转。
"马恩"?你是指Maven吗?
如果是指Maven的话,那么你这句话就很有问题了。
Maven是Build工具,类似于Ant(其实官方强烈反对大家对Maven的这种评价,他们认为Maven是一个工程管理工具)。Continuum是一个持续集成服务器,类似于CruiseControl,它是Maven项目的一个子项目,天然支持对Maven工程的持续集成。  回复  更多评论
  

# re: Continuum入门--实例 2007-06-29 08:43 Sha Jiang
> 不知你是否用过Maven的Eclipse plugin,有时间能否谈谈?
我一直没有用过Maven的Eclpse插件。
如果你看了我其它文章,就知道我是通过将Maven配置为Eclipse的外部工具的方法而在Eclipse内部使用Maven的。
插件功能应该要强些,但对我个而言用处不大。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: