本文虽然是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控制台界面,如下图所示。
第一次登录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吗 *_*)
使用初始配置时设置的用户名及密码,就可以登录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中有两个子工程,所以只能使用前一种方法。
只需要加载顶层工程的POM文件,Continuum会自动加载其它moudel的POM文件。如上图所示,在M2 POM Url中输入:
file:///D:/maven/continuum/Demo/pom.xml
提交之后会看到如下的画面,即表示Maven工程已经被正确地加载到Continuum中了。
加载工程时,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。
点击上图表格中的列“Build”中的数字,将可以看到本次Build的详细过程,如下图所示。
2.8 设置时间表
前面已经谈过,持续集成就需要进行有规律的Build。即需要建立一个时间表,让持续集成服务器按照这个表进行Build。Continuum默认的时间表为:每天的每一个整点进行一次Build,即每天每隔一小时Build一次。我们也可以建立自己的时间表。点击Administration组中的“Schedules”按钮就可以发现当前默认使用的时间表,再点击“Add”按钮就可以添加新的时间表了,如下图所示。
这些参数项中最关键的是Cron Expression,它定义了Continuum执行Build的时间规则,它的语法规则请见参加资源[4]。上图中规定的时间表是:在每天的14:00-14:59之间,每分钟都要进行一次Build。勾选上Enable复选框之后,再提交,该Schedule就可以被使用了。
为了使用新建的Schedule,我们需要进入工程视图页面。点击“Show Projects”-->工程名(如CE Maven Demo),就可以看到该工程的详细信息,如下图所示。
在工程视图的Build Definitions项的Goals中可以发现,使用的Schedule就是“DEFAULT_SCHEDULE”时间表。再点击“Add”按钮,并在Schedule下拉列表框中,请选择刚刚新建的“My First Schedule”时间表(如下图所示),最后再提交后,新的时间表将被采用。
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
分享到:
相关推荐
这个“apache-continuum-1.1-beta-3.tar.gz”压缩包包含了Continuum的1.1 beta 3版本,它专为Maven项目设计,用于自动化构建、测试和部署过程,提升软件开发的效率和质量。在Linux操作系统环境下,用户可以方便地...
资源分类:Python库 所属语言:Python 资源全名:pyiron_continuum-0.0.2-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
【标题】"continuum-buildagent-webapp-1.4.2.zip" 是一个用于持续集成的构建代理Web应用程序的版本包。Continuum是Apache软件基金会的一个项目,它提供了一个全面的持续集成解决方案,帮助开发者管理和自动化构建...
Maven是一个由Apache软件基金会提供的项目管理及自动构建工具...Apache Continuum是一个企业级持续集成服务器。提供的特性包括:自动构建、发布管理、基于角色的权限管理、源码控制系统、与其它流行构建工具相集成。
纳米力学经典图书,A. Cemal Eringen (eds.)-Nonlocal Continuum Field Theories-Springer-Verlag New York (2004).pdf
这个资源,SQLAlchemy-Continuum-0.2.0.tar.gz,是从Python的官方软件包索引PyPI(Python Package Index)获取的。PyPI是Python开发者发布和分享他们编写的开源软件的地方,使得全球的Python用户可以方便地下载和...
python库。 资源全名:continuum_mechanics-0.1.1-py2.py3-none-any.whl
"Continuum-2.0.2_checker_源码"这个标题揭示了我们正在处理的是一个与Continuum项目相关的源码包,版本号为2.0.2,并且它包含了一个名为"checker"的组件或功能。这个"checker"可能是用于代码质量检查、静态分析或者...
"我的世界"是一款备受欢迎的沙盒建造游戏,其核心特色在于玩家可以通过各种方块进行创造和探索。材质包是“我的世界”中一个重要的自定义元素,它允许玩家改变游戏内的视觉效果,使得游戏环境更加丰富多彩。...
Continuum 2022 快速、流畅且有趣!后期制作行业最完整的插件集合可提供20个类别的近350种创意效果、4000多个预设、内置奥斯卡获奖摩卡平面跟踪和遮罩、将 VFX 驱动为音乐的 Beat Reactor 和 FX 浏览器。忙碌的编辑...
conda install -c continuumio continuum-flask 用法 用continuum_flask.Flask替换flask.Flask模块。 这假设您在将要导入的应用程序旁边有一个settings模块。 这可以通过在实例化Flask时提供显式settings kwarg 来...
#Continuum 服务网关- 101 示例代码库演示: 创建连续服务网关创建服务提供者将服务绑定到作业使用服务(在胶囊内使用 curl) 请查看runDemo.sh以获取命令行说明快速开始runDemo.sh将为您运行所有命令。 完成后,您...
入门-对于Linux 装置 安装Docker: https://docs.docker.com/install/linux/docker-ce/ubuntu/ 安装Docker Compose: https://docs.docker.com/compose/install/ 设置和运行 $ git ...