本例实现Hudson+Ant+SVN+Tomcat实现快速构建:
基本流程:
1、工具安装
2、新建基本WEB项目,编制Ant脚本,可用脚本打出war包
3、提交代码到SVN
4、Hudson配置用插件安装,新建任务并实现自动从SVN拉最新代码找成war包,拷贝包到tomcat的Webapps目录
下面具体步骤:
1、工具安装列出以下版本,具体安装略
Java: jdk1.7.0_17
Ant : apache-ant-1.9.4
Tomcat: apache-tomcat-6.0.37
Hudson:
具体下载地址:http://www.eclipse.org/downloads/download.php?file=/hudson/war/hudson-3.3.3.war
我使用的是hudson-3.3.3这一版本,直接从网站下载war包,放到tomcat的webapps目录,启动tomcat访问地址:http://localhost:8080/hudson-3.3.3,能访问即OKl
SVN: 服务器 VisualSVN-Server-3.5.4-win32.msi
客户端 TortoiseSVN-1.7
2、新建基本WEB项目,编制Ant脚本,可用脚本打出war包,具体包见附件DEMO.zip,这里只列出项目的ant文件
<?xml version="1.0" encoding="UTF-8" ?> <project name ="test" default ="war" basedir ="."> <property name ="classes" value ="${basedir}/build/classes"/> <property name ="build" value ="${basedir}/build"/> <property name ="lib" value ="${basedir}/WebContent/WEB-INF/lib"/> <target name ="clean"> <delete dir ="${build}"/> </target> <target name ="compile" depends ="clean"> <mkdir dir ="${classes}"/> <javac srcdir ="${basedir}/src" destdir ="${classes}"/> </target> <target name ="war" depends ="compile"> <war destfile ="${build}/DEMO.war" webxml ="${basedir}/WebContent/WEB-INF/web.xml"> <fileset dir ="${basedir}/WebContent" includes ="**/*.jsp"/> <lib dir ="${lib}"/> <classes dir ="${classes}"/> </war> <!--<copy todir="D:\Java\apache-tomcat-6.0.37\webapps\" file="${build}/DEMO.war"> </copy>--> </target> </project>
试运行ant脚本,在项目子目录build下找到DEMO.war包,可复制war包到tomcat的webapps目录看项目能否访问
3、提交代码到SVN
将项目DEMO的代码提交到SVN具体路径:https://127.0.0.1/svn/MYREP/DEMO
这里我的SVN服务器和客户端都是安装在本机的,在SVN服务器要新建用户并授予项目的读写权限,我新建的是ADMIN,密码请记住,配置完成后自己可以使用SVN客户端取一下,确认一下读取代码没问题,如下图:
4、Hudson配置用插件安装,新建任务并实现自动从SVN拉最新代码找成war包,拷贝包到tomcat的Webapps目录
将hudson的war包部署到tomcat下启动访问http://localhost:8080/hudson-3.3.3,会提示安装必要的插件
这里因为我要用到SVN和tomcat自动部署,所以需要安装下图红色标记的插件
安装插件要费点时间,具体时间我没管,可能要比较久。
安装完插件后,进入系统管理下的系统设置菜单如下图:
具体设置如下:
邮箱通知用到的时候再设置。
保存后设置完成。
下面新建任务,任务名称设置为testdemo
hudson默认目录为.hudson,即具体为路径为C:\Users\{用户名}\.hudson
任务建新完成后任务路径为:C:\Users\{用户名}\.hudson\jobs\testdemo,hudson到时候从SVN拉代码会在该目录下创建workspace目录
继续任务的具体配置
配置完成后save保存,返回后点立即构建,成功后截图如下,如果成功将会在tomcat的webapps目录产生DEMO.war包
注意,在任务设置中的Context path设置很关键,如果设置错误在构建时会报以下错误:
ERROR: Publisher hudson.plugins.deploy.DeployPublisher aborted due to exception org.codehaus.cargo.container.ContainerException: Failed to deploy [C:\Users\lweifeng\.hudson\jobs\testdemo\workspace\build\DEMO.war] at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.deploy(AbstractTomcatManagerDeployer.java:107) at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:185) at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:64) at hudson.plugins.deploy.CargoContainerAdapter$1.invoke(CargoContainerAdapter.java:93) at hudson.plugins.deploy.CargoContainerAdapter$1.invoke(CargoContainerAdapter.java:77) at hudson.FilePath.act(FilePath.java:793) at hudson.FilePath.act(FilePath.java:775) at hudson.plugins.deploy.CargoContainerAdapter.redeploy(CargoContainerAdapter.java:77) at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:47) at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:51) at hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:736) at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:714) at hudson.model.AbstractBuild$AbstractRunner.performAllBuildSteps(AbstractBuild.java:690) at hudson.model.Build$RunnerImpl.post2(Build.java:163) at hudson.model.AbstractBuild$AbstractRunner.post(AbstractBuild.java:652) at hudson.model.Run.run(Run.java:1519) at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44) at hudson.model.ResourceController.execute(ResourceController.java:82) at hudson.model.Executor.run(Executor.java:137) Caused by: org.codehaus.cargo.container.tomcat.internal.TomcatManagerException: FAIL - Failed to deploy application at context path /D:/Java/apache-tomcat-6.0.37/webapps
这个错误是tomcat报出来的,很容易搞得不知道如何解决,其实只是配置引起的。
当然将war包拷贝到tomcat目录,使用ant的copy一样可以实现,如我在ant的文件里面注释的一段。
<!--<copy todir="D:\Java\apache-tomcat-6.0.37\webapps\" file="${build}/DEMO.war"> </copy>-->
但ant 拷贝对本机开发和部署还行,如果跨服务器部署就不行了。
另外一种处理方法是通过调用批处理, 构建设置-build选项-Execute Windows batch command,使用批处理命令直接移war包。不过这样的缺点在于,移动失败的时候,会显示批处理命令执行成功,hudson是不会报错的,需要人工检查。
补充:上面我们是手工点“立即构建”完成部署的,hudson支持设置指定时间自动构建
配置自动构建的计划,假设我们想让项目中每天12点和晚上8点自动构建一次,只需要在Build Triggers中选择 Build periodically,并在Schedule中输入 0 12,20 * * *。 注: Schedule的配置规则是有5个空格隔开的字符组成,从左到右分别代表:分 时 天 月 年。*代表所有, 0 12,20 * * * 表示在任何年任何月的任何天的12和20点的0分 进行构建 如下图设置为每5分钟自动构建一次:
相关推荐
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器...
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...
Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java...
从无到有详细的描述了CI环境的搭建,放到这儿和大家分享。压缩包里有三种格式的文档,内容是一样的,只是为了方便大家阅读。