基于hudson搭建持续集成服务器
?1、环境准备
?????操作系统:SUSE11?????服务器:Tomcat6.0.20?? ? Hudson:hudson-1.398.war(下载地址:http://java.net/projects/hudson/downloads/download/war/hudson-1.398.war)2、搭建hudson服务器?? ? 其实搭建服务器的过程很简单,在suse11下安装tomcat,然后将hudson-1.398.war改名为hudson.war,并拷贝到tomcat的webapps目录下,这样启动tomcat服务器,访问地址:http://localhost:8080/hudson,如果能够看到hudson页面:(我这边是已经在hudson上建立了2个项目),则说明服务器已经启动成功。

?
3、hudson服务器配置?? ? 点击上图左侧的系统管理,进入到系统管理页面:

?
?? ? 系统设置,主要是设置一些全局参数,比如一些变量、jdk安装目录、ant安装目录等。?? ? 读取设置,这个是在你修改了系统参数之后,不需要重启服务器,选择读取设置就可以了。?? ? 管理插件,在这里可以查看hudson可以使用的插件,然后选择需要的插件安装,这里有一个插件在后面用到,就是tomcat远程部署插件。
?? ? 点击系统设置,进入设置页面:?? ? a、设置jdk,别名随便设置,如jdk1.6.0_22?? ? ? ? ?JAVA_HOME ,就是java的安装目录:/usr/java/jdk1.6.0_22/?? ? b、设置ant,我这里使用ant来构建项目的,你也可以选择maven,那这里就设置maven相关参数?? ? ? ? ?Name,设置ant的名称:apache-ant-1.8.1?? ? ? ? ?ANT_HOME,ant的安装目录:/usr/apache-ant-1.8.1?? ? c、设置邮件通知,这里可选,但是为了及时获取构建消息,还是设置一下。?? ? 设置完毕之后,别忘了点击保存来保存配置。
3、新建项目,在首页点击新建任务,

??? ???? ? 任务名称,填写你的项目名称,或者填写具有意义的名字,下面选择根据需要,我选择构建一个自由风格的软件项目,然后ok进入到任务设置页面。?? ? 在任务设置页面,需要进行以下设置:Source Code Management、Build Triggers、Build、Post-build Actions?? ??Source Code Management :设置源代码管理工具,这里选择 Subversion,下面的Modules设置项目的svn地址即可?如http://127.0.0.1/svn/svndata/trunk/demo?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?这里需要注意的一点是,下面的Local module directory (optional) 要把“.”去掉,避免后面从svn库取项目源代码的时候,不包含项目目录。?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?最后勾中User ?Update。?? ??Build Triggers:这里设置自动构建的时机以及频率,根据需要设置,我选择的是Poll SCM, Schedule :*/30 * * * * 意思是每30分钟检查一次svn库,如果有更新就进行一次构建。
?? ??Build:Invoke Ant,这里就可以选择之前配置的ant了。?? ???? ??Post-build Actions:?这里是设置在构建完毕之后,执行什么操作,因为我安装了Findbugs插件,所以这里会有Publish FindBugs analysis results这个选项,?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?FindBugs results 这里填写findbugs生成的findbugs.xml文件路径,相对于~/.hudson/jobs/demo/workspace的。
?? ? 如果安装了tomcat的远程部署插件,可以在下面设置参数:?? ??

?? ? 到此为止,项目的配置就结束了,但是项目还不能被自动构建,还需要在我们的项目中添加ant的build.xml文件。这里给出一个示例脚本:<?xml version="1.0" encoding="UTF-8"?><project?basedir="."?default="findbugs"?name="office">??????<property?environment="env"?/>??????<property?name="debuglevel"?value="source,lines,vars"?/>??????<property?name="findbugs.home"?value="/usr/findbugs-1.3.9"?/>
??????<property?name="debug"?value="off"?/>??????<property?name="optimize"?value="on"?/>??????<property?name="deprecation"?value="on"?/>
??????<property?name="target"?value="1.5"?/>??????<property?name="source"?value="1.5"?/>
??????<property?name="build"?value="build"?/>??????<property?name="src"?value="src"?/>
??????<path?id="classpath">????????????<fileset?dir="${build}/WEB-INF/lib">??????????????????<include?name="**/*.jar"?/>????????????</fileset>????????????<!--<pathelement location="lib/"/>-->??????</path>
??????<target?name="clean">????????????<delete?dir="${build}"?/>??????</target>
??????<target?name="init">????????????<mkdir?dir="${build}"?/>????????????<mkdir?dir="${build}\WEB-INF"?/>????????????<mkdir?dir="${build}\WEB-INF\classes"?/>
????????????<copy?todir="${build}">??????????????????<fileset?dir="${basedir}\WebRoot">????????????????????????<include?name="**"?/>??????????????????</fileset>????????????</copy>??????</target>
??????<target?name="complie"?depends="init">????????????<javac?srcdir="${src}"?destdir="${build}/WEB-INF/classes">??????????????????<classpath?refid="classpath"?/>????????????</javac>????????????<copy?todir="${build}/WEB-INF/classes">??????????????????<fileset?dir="${src}">????????????????????????<include?name="**/*.xml"?/>????????????????????????<include?name="**/*.properties"?/>??????????????????</fileset>????????????</copy>??????</target>
??????<target?name="build"?depends="clean,init,complie">????????????<war?warfile="${build}/demo.war"?webxml="${build}/WEB-INF/web.xml">??????????????????<lib?dir="${build}/WEB-INF/lib"?/>??????????????????<classes?dir="${build}/WEB-INF/classes"?/>??????????????????<fileset?dir="${build}"?/>????????????</war>??????</target>
??????<taskdef?name="findbugs"?classname="edu.umd.cs.findbugs.anttask.FindBugsTask"?/>??????<target?name="findbugs"?depends="build">????????????<findbugs?home="${findbugs.home}"?output="xml"?outputFile="${build}/findbugs.xml">??????????????????<auxClasspath>????????????????????????<fileset?dir="${build}/WEB-INF/lib">??????????????????????????????<include?name="*.jar"?/>????????????????????????</fileset>????????????????????????<fileset?dir="${findbugs.home}/lib">??????????????????????????????<include?name="*.jar"?/>????????????????????????</fileset>??????????????????</auxClasspath>??????????????????<sourcePath?path="${src}"?/>??????????????????<class?location="${build}/WEB-INF/classes"?/>????????????</findbugs>??????</target></project>?? ???????可以简单的把这个脚本拷贝过去,然后修改相应的参数就可以使用了。
?? ? 这样,在首页点击项目后面的构建按钮(每行最后一个)就可以进行构建了:

?
?? ? 构建过程大体是这样的,hudson会通过svn从svn库中取得项目源代码到hudson所在的服务器的工作空间(一般是在当前登录用户目录下的.hudson/jobs/项目名称/workspace/目录下),然后调用项目中的ant脚本文件(build.xml)进行构建,根据build.xml文件的配置,会生成相应的文件,比如上面的脚本就会在build目录下生成war包。?? ? 如果你的项目还安装了tomcat远程部署插件并且做了配置,那么在生成war包之后,hudson将进行远程部署,即通过tomcat中的manager应用将war部署到tomcat中。?? ? 备注:tomcat要开始远程部署,首先要保留webapps目录下的manager应用,其次,修改tomcat配置文件:tomcat-users.xml,在里面添加角色manager以及该角色的用户,配置代码如下:<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
? <role rolename="manager"/>
? <role rolename="admin"/>
? <user username="admin" password="admin" roles="admin,manager"/>
</tomcat-users>
?? ? 如果在build.xml文件里面配置了findbugs任务,那么构建还会生成findbugs.xml文件,findbugs插件会生成相应的报告。
?? ? 备注:findbugs插件的安装,下载地址:http://findbugs.sourceforge.net/downloads.html?? ? 然后解压到某个目录即可,然后在build.xml文件里面配置findbugs的路径即可。
这样,支持持续构建、findbugs以及远程部署的hudson服务器搭建完毕。?? ??
?