-
CruiseControl 使用Ant启动tomcat后 cc为何不继续执行,手动关闭tomcat窗口,cc继续轮询下一次构建3
因为项目需要做了一个CI服务器,使用的是CruiseContol+SVN+Ant,在CC的<schedule>中我配置了两个ant的脚本,一个是执行build的脚本,一个是执行release的脚本,build的时间间隔目前设置为3分钟,release是每天往web服务器上将build.xml打出的最新war包部署一次,代码如下:<schedule interval="180"> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/release.xml" time="1002"/> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" /> </schedule>
我单独只放build脚本时CC正常,每隔3分钟构建一次,但加入release脚本后就出现了问题,我release.xml脚本如下:<project name="eadp" default="releaseok" basedir="."> <property name="tomcatHome" value="E:\TDDOWNLOAD\apache-tomcat-6.0.33"/> <property name="target" value="${basedir}/target"/> <!-- 清理tomcat的work文件夹 ,原项目文件及war包--> <target name="clean" depends="shutdowntomcat"> <delete dir="${tomcatHome}/work/Catalina/localhost/${ant.project.name}"/> <delete dir="${tomcatHome}/webapps/${ant.project.name}"/> <delete file="${tomcatHome}/webapps/${ant.project.name}.war"/> </target> <!-- 关闭tomcat --> <target name="shutdowntomcat"> <!-- 调用tomcat shutdown命令强制关闭 --> <exec executable="${tomcatHome}/bin/shutdown.bat" failonerror="false"></exec> <!-- 休息30秒,等待关闭完成 --> <sleep seconds="30"/> </target> <!-- 启动tomcat --> <target name="startuptomcat" depends="copyWar"> <exec executable="${tomcatHome}/bin/startup.bat" spawn="true" vmlauncher="false"> <env key="CATALINA_HOME" value="${tomcatHome}" /> <arg line="/c start ${tomcatHome}/bin/startup.bat" /> </exec> </target> <!-- 拷贝war至tomcat目录 --> <target name="copyWar" depends="clean"> <copy file="${target}/${ant.project.name}.war" todir="${tomcatHome}/webapps"></copy> </target> <target name="releaseok" depends="startuptomcat"> <echo message="release eadp-web ok"></echo> </target> </project>
因为这个脚本中有打开tomcat的target,所以执行这个脚本时打开tomcat后,releaseok的target也能执行,也输出了内容,CC提示Build Success,但是并没有像build.xml脚本执行完成后CC输出的 next build in 3 minutes,查看logs里面的status.txt里面记录的是 2011-11-16T02:08:26 releaseok 就是我的release.xml的最后一个target,然后CC就停止在这里了,不继续轮询下一个构建,如果这时我手动关闭刚才ant打开的tomcat窗口手动关闭,CC的控制台马上就有了反应,会正常输出下一次build的时间 然后一切就正常了。似乎CC是在等待打开的Tomcat窗口给它一个返回的信息,我如何能让ant执行的打开tomcat后让CC继续下一次构建呢?
CC的porject全配置如下:<project name="eadp-web"> <listeners> <currentbuildstatuslistener file="logs/${project.name}/status.txt"/> </listeners> <bootstrappers> <svnbootstrapper localWorkingCopy="projects/${project.name}" /> </bootstrappers> <modificationset quietperiod="30"> <filesystem folder="projects/${project.name}"/> </modificationset> <schedule interval="180"> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/release.xml" time="1002"/> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" /> </schedule> <log> <merge dir="projects/${project.name}/target/test-results"/> </log> <publishers> <onsuccess> <artifactspublisher dest="artifacts/${project.name}" file="projects/${project.name}/target/eadp.war"/> </onsuccess> </publishers> </project>
问题补充:asyty 写道调用tomcat的start.bat 用call命令,不要用start命令,DOS是单任务的。。。start tomcat之后就卡住了
你说的call命令是说ant的还是?不好意思
问题补充:谢谢asyty的回答,我按你说的方式修改了调用startup.bat的方式,结果还是一样,release.xml执行完后status.txt里记录的还是:now building since
2011-11-16T04:49:29
progress: 2011-11-16T04:50:10 releaseok 手动关闭tomcat窗口后 status.txt里记录为:waiting for next time to build since
2011-11-16T04:51:42
progress: 2011-11-16T04:51:42 next build in 3 minutes 就正常了,期间还抱了个错,如下:[cc]十一月-16 12:51:06 atusReportTask- Failed to reach dashboard instance : http ://localhost:8080/dashboard/buildloop/listener, either the dashboard has not sta rted up or there is a network problem. java.net.SocketTimeoutException: Read timed out at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read(BufferedInputStream.java:237) at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java: 77) at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:105 ) at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection. java:1115) at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMetho dBase.java:1832) at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodB ase.java:1590) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.j ava:995) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(Htt pMethodDirector.java:397) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMe thodDirector.java:170) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav a:396) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.jav a:324) at net.sourceforge.cruisecontrol.report.BuildLoopStatusReportTask.run(Bu ildLoopStatusReportTask.java:90) at net.sourceforge.cruisecontrol.report.BuildLoopStatusReportTask.run(Bu ildLoopStatusReportTask.java:75) at java.util.TimerThread.mainLoop(Timer.java:512) at java.util.TimerThread.run(Timer.java:462)
问题补充:asyty 写道也就是说 要把release的task和build的task写在同一个xml里,也就是把release.xml里的task写到build里
<schedule interval="180"> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="release" time="1002"/> <ant anthome="apache-ant-1.7.0" target="build" buildfile="projects/${project.name}/build.xml" /> </schedule>
我尝试了这种方式,将release.xml的target都放入到了build.xml里面,<schedule>标签中只有build.xml这一个文件,可是结果还是一样,在打开的tomcat后,cc停止了,现在我尝试在ant中开启tomcat服务的方式来打开tomcat,看看如何
问题补充:asyty 写道也就是说 要把release的task和build的task写在同一个xml里,也就是把release.xml里的task写到build里
<schedule interval="180"> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="release" time="1002"/> <ant anthome="apache-ant-1.7.0" target="build" buildfile="projects/${project.name}/build.xml" /> </schedule>
谢谢asyty的指点,我后来将release.xml里的部署功能放到了release.bat里,用<schedule>来执行这个bat脚本,同时将tomcat换成了服务模式,bat里直接start服务,这种方式cc能够继续轮询,多谢asyty2011年11月16日 11:19
6个答案 按时间排序 按投票排序
-
采纳的答案
也就是说 要把release的task和build的task写在同一个xml里,也就是把release.xml里的task写到build里
<schedule interval="180"> <ant anthome="apache-ant-1.7.0" buildfile="projects/${project.name}/build.xml" target="release" time="1002"/> <ant anthome="apache-ant-1.7.0" target="build" buildfile="projects/${project.name}/build.xml" /> </schedule>
2011年11月16日 14:24
-
那个exception我搜了下 好像很多人都遇到了 貌似是cc的bug
http://jira.public.thoughtworks.org/browse/CC-766
我看了下官方文档的FAQs,据说 schedule里只能用一个xml文件,可以有不同的task,所以说,之前的问题可能不是ant的问题 而是schedule的问题
引用Q: Can I use two different buildfiles in the "schedule interval" -target in config.xml? I have got two different projects that I would like to run, one after the other, but when trying the following, it didn't succeed:
A: Nope. You can run multiple targets in one build file (separate them with spaces), but only one build file. Workaround is to create a wrapper build.xml that delegates the two project specific buildfiles.2011年11月16日 14:20
-
<!-- 启动tomcat --> <target name="startuptomcat" depends="copyWar"> <exec executable="cmd.exe" spawn="true" vmlauncher="false"> <env key="CATALINA_HOME" value="${tomcatHome}" /> <arg line="/c call ${tomcatHome}/bin/startup.bat" /> </exec> </target>
2011年11月16日 12:10
-
不是 是调用start.bat的地方
比如<arg line="/c [b]start [/b]${tomcatHome}/bin/startup.bat" />
2011年11月16日 11:30
-
调用tomcat的start.bat 用call命令,不要用start命令,DOS是单任务的。。。start tomcat之后就卡住了
2011年11月16日 11:22
相关推荐
【CruiseControl + ANT + SVN】是一个集成开发环境(IDE)自动化构建和版本控制的解决方案。这个组合在软件开发过程中发挥着关键作用,确保代码的持续集成和版本管理。下面将详细阐述这三个组件以及它们如何协同工作...
3. **Ant构建**:编写好Ant的`build.xml`文件,由CruiseControl调用来执行构建。 #### 五、小结 通过本文档,我们可以了解到CruiseControl和Ant在持续集成中的应用。CruiseControl作为一个强大的CI工具,可以帮助...
安装完成后,系统会包含一系列必要的文件和目录,比如`cruisecontrol.bat`用于启动服务,`config.xml`作为主要的配置文件,`apache-ant-1.6.5`是CruiseControl依赖的Ant环境,`docs`包含使用文档和示例,`lib`存放...
### [CruiseControl] Binary安装与启动指南 #### 一、CruiseControl简介 CruiseControl 是一个持续集成工具,用于自动化构建过程并提供实时反馈,帮助开发团队尽早发现问题。它支持多种构建工具如 Ant 和 Maven,...
如果你用的是 CC2.2 版本,那么在%CC_HOME%\reporting\jsp\dist 目录下已经有一个 cruisecontrol.war 文件,你可以直接将这个文件 COPY 到你的%TOMCAT_HOME%\webapps 目录下,不 过这种方式通常都会出错,前 面我们...
之后,CruiseControl将按照设定的时间间隔自动执行构建。 总结,配置CruiseControl定时运行涉及以下几个关键步骤:安装CruiseControl、编写`cruisecontrol.xml`配置文件、设定构建触发器、定义构建步骤、配置监控与...
`build.xml` 是Ant构建脚本,它是CruiseControl执行构建任务时调用的。Ant是一个Java语言编写的构建工具,它使用XML格式来描述构建过程,包括编译、测试、打包等步骤。在`build.xml`中,你可以定义目标(targets)和...
安装之后,CruiseControl预先配置了一个配置文件,轮询CVS(或其它版本控制系统)存储库并执行ANT构建脚本。服务环境不需要安装Web服务器,CruiseControl已经内嵌了Jetty web服务程序。 3.CruiseControl的配置 当...
安装完成后,运行安装目录下的CruiseControl.bat启动CruiseControl,通过访问 http://localhost:8080/dashboard 检查安装是否成功,如果看到示例项目connectFour,说明CruiseControl已成功运行。 **四、VisualSVN-...
3. **启动**:使用`cruise control start`命令启动服务,`cruise control stop`则停止服务。 ### 四、CruiseControl.rb的工作流程 1. **检查源码仓库**:CruiseControl.rb定期检查源码仓库是否有新的提交。 2. **...
**CruiseControl 使用总结** CruiseControl 是一个开源的持续集成工具,主要用于自动化软件构建、测试和部署过程。它的核心理念是通过频繁地构建项目,及时发现并解决代码中的问题,从而提高软件开发效率和质量。这...
1. **CruiseControl简单使用介绍**:这部分可能涵盖了CruiseControl的基本操作,如安装、启动服务以及配置基本的构建任务。乘风破浪的百度空间文章可能以图文并茂的方式解释了这些概念,使初学者快速上手。 2. **...
- 构建响应:构建代理执行构建任务后向主控节点返回构建结果。 #### 五、CruiseControl的配置文件 CruiseControl的配置文件中包含了对构建代理的详细配置,例如: ```xml <cruisecontrol> <!-- 具体配置细节 -...
这是一项在软件开发过程中非常关键的技术实践,它能够自动检测代码库中的更新,并自动执行构建、测试以及部署等任务,从而确保项目的稳定性和质量。 ### Maven2+Subversion+CruiseControl配置详解 #### 1. Maven2...
CruiseControl是一款持续集成工具,它能够自动化软件构建、测试和发布的过程,是开发者进行敏捷开发和持续集成的重要工具。本教程将详细讲解CruiseControl的学习与实践。 **第一章 CruiseControl实践** 1.1 Cruise...