文章目标
本文主要介绍持续集成的意义及基于Hudson工具的集成配置,通过Maven, Subversion, Tomcat实现项目集成开发,提高团队工作效率。基础环境:CentOS6, Jdk1.7, Maven3.3.3, Subversion1.6, Hudson3.3.0.war, Tomcat6
阅读目录
1. 持续集成的意义
2. 基础环境安装
3. Subversion安装及配置
4. Hudson安装
5. 自动部署war包到tomcat
1. 持续集成的意义
持续集成是指能对项目源码快速,高效地自动化构建,并为相关开发人员提供反馈,包括:
持续编译:如对版本控制系统Subversion每一次变更都能快速地编译。
持续测试:使用测试框架如Junit对测试单元自动,重复地执行。
持续审查:如使用CheckStyle,PMD之类的质量控制工具生成各类报告,如测试覆盖率报告,CheckStyle报告等。
持续反馈:将失败报告持续地反馈给相关人员。
从上面的定义可以知道,持续集成能帮助我们快速失败,更小增量的迭代修复问题。下面我们将通过Hudson, Maven, Subversion, Tomcat实现一个持续集成环境的搭建, 使得版本库的每一次变更,都能及时地反馈到测试服务器上,对于失败报告也能及时地反馈给开发人员。
2. 基础环境安装
基础环境包括 jdk7, maven3.3.3, tomcat6,安装都比较简单,这里就不再赘述,环境变量配置可以参考以下内容:
vi /etc/profile JAVA_HOME=/usr/java/jdk1.7.0_71 MAVEN_HOME=/opt/apache-maven-3.3.3 export CLASSPATH=.:$JAVA_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
3. Subversion安装及配置
版本库是项目源码管理常用方式,Subversion可以记录每次源码变更,通过与Hudson集成,对变动版本自动进行持续编译,测试,审查,通知的工作。
# 安装 yum install subversion yum install mod_dav_svn svnserve --version # 创建仓库 mkdir /opt/svn/repositories svnadmin create /opt/svn/repositories # 仓库访问权限 vim /opt/svn/repositories/conf/passwd [users] foo = bar vim /opt/svn/repositories/conf/authz [/] foo = rw vim /opt/svn/repositories/conf/svnserve.conf [general] anon-access=none auth-access=write password-db=passwd authz-db=authz realm=/opt/svn/repositories # 防火墙 vim /etc/sysconfig/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT service iptables restart # 启动服务 svnserve -d -r /opt/svn/repositories # 开机自启动 vi /etc/rc.d/rc.local /usr/bin/svnserve -d -r /opt/svn/repositories
完成Subversion安装后,就可以用客户端工具(如tortoisesvn),把前面章节的 account 项目签入svn版本库中,如下图:
4. Hudson安装
首先到官网下载安装包:http://hudson-ci.org,我下载的版本是hudson3.3.0.war , 重命名后将hudson.war放到tomcat的webapp目录中,然后启动tomcat,访问:http://172.16.240.66:8080/hudson 就可以了。
首次启动会提示插件安装,可以先忽略以后再装。在使用Hudson之前,需要配置一些基础变量信息:
基础环境变量配置
这里主要配置JDK, Maven, Mail 信息,首先导航到 系统管理 -> 系统设置 , 找到相应项,然后如下图配置即可:
这里配置了系统邮箱,当构建失败时,将以这个邮箱发信给相关开发人员。
创建Hudson任务
Hudson任务通常是对应着一个版本库的项目,比如对SVN上面的Account项目建立一个Hudson任务,任务名称也叫Account,当SVN的源码变更时,该任务就会按要求执行相应的构建任务了。详细配置信息如下:
新建任务 -> 自由风格,然后找到以下相应的配置项:
Discard old builds -> Max # of builds to keep -> 10 // 最多保留十次构件文件 Source Code Management -> Subversion -> Repository URL -> svn://172.16.240.66/account-parent,点击Update credentials输入SVN用户信息 Build Triggers -> Poll SCM -> */10 * * * * // 每十分钟轮巡一次 Build -> Invoke Maven2 -> Goals : clean install // Maven构建目标 E-mail Notification -> Recipients[ [email protected] ] -> Send e-mail for every unstable build
5. 自动部署war包到Tomcat
Web项目团队开发过程中,内部往往需要一个开发版本视图(项目URL),访问该视图总能得到源码库最新版本功能。要实现这个功能,需要安装一个插件:
系统设置 -> 插件管理 -> Deploy to container plugin
插件安装完成后,重新配置Account任务,将可以看到多了一项 Post-build actions -> Deploy war/ear to a container:
填入上图的配置信息后保存。从上图的配置名字中可以看出,该插件是通过Tomcat Manager实现war包部署的,所以还需要提供 tomcat-user 账户:
vim /opt/apache-tomcat-6.0.43/conf/tomcat-users.xml <role rolename="manager-gui"/> <role rolename="manager-script"/> <user username="admin" password="admin" roles="manager-gui,manager-script"/>
现在,让我们对Account任务执行 马上构建,在构建任务的电视图标输出中,就可以看到以下信息:
说明Hudson已经为我们自动部署了一个war包到tomcat中,这时访问tomcat地址:http://172.16.240.66:8080/account-web-1.0.0-SNAPSHOT/login.jsp 就可以能访问页面了。
为了验证版本库变更能响应到服务器上,我们对上面的登录页面(login.jsp)进行以下修改,然后再提交到SVN服务器上:
提交成功后,Hudson在到达轮巡时间时,发现版本库的更新,就会重新构建,部署。这时就可以看到更新了:
Note : 以上生成的项目名称并不友好,大家可以通过设置 account-web 的 pom.xml,在 build 元素下添加: <finalName>account</finalName> 这样,生成的包名就是 account.war 了。
参考资料
SVN搭建:http://www.cnblogs.com/zhoulf/archive/2013/02/02/2889949.html