0 0

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能够继续轮询,多谢asyty
2011年11月16日 11:19

6个答案 按时间排序 按投票排序

0 0

采纳的答案

也就是说 要把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
0 0

那个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
0 0

<!-- 启动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
0 0

<arg line="/c start ${tomcatHome}/bin/startup.bat" />
 

2011年11月16日 11:30
0 0

不是 是调用start.bat的地方
比如 

<arg line="/c [b]start [/b]${tomcatHome}/bin/startup.bat" />
 

2011年11月16日 11:30
0 0

调用tomcat的start.bat 用call命令,不要用start命令,DOS是单任务的。。。start tomcat之后就卡住了

2011年11月16日 11:22

相关推荐

    CruiseControl + ANT +SVN

    【CruiseControl + ANT + SVN】是一个集成开发环境(IDE)自动化构建和版本控制的解决方案。这个组合在软件开发过程中发挥着关键作用,确保代码的持续集成和版本管理。下面将详细阐述这三个组件以及它们如何协同工作...

    CruiseControl及ant配置

    3. **Ant构建**:编写好Ant的`build.xml`文件,由CruiseControl调用来执行构建。 #### 五、小结 通过本文档,我们可以了解到CruiseControl和Ant在持续集成中的应用。CruiseControl作为一个强大的CI工具,可以帮助...

    CruiseControl简介及使用举例

    安装完成后,系统会包含一系列必要的文件和目录,比如`cruisecontrol.bat`用于启动服务,`config.xml`作为主要的配置文件,`apache-ant-1.6.5`是CruiseControl依赖的Ant环境,`docs`包含使用文档和示例,`lib`存放...

    [CruiseControl]binary安装和启动

    ### [CruiseControl] Binary安装与启动指南 #### 一、CruiseControl简介 CruiseControl 是一个持续集成工具,用于自动化构建过程并提供实时反馈,帮助开发团队尽早发现问题。它支持多种构建工具如 Ant 和 Maven,...

    cruisecontrol_ant_svn持续集成

    如果你用的是 CC2.2 版本,那么在%CC_HOME%\reporting\jsp\dist 目录下已经有一个 cruisecontrol.war 文件,你可以直接将这个文件 COPY 到你的%TOMCAT_HOME%\webapps 目录下,不 过这种方式通常都会出错,前 面我们...

    cruisecontrol配置定时运行

    之后,CruiseControl将按照设定的时间间隔自动执行构建。 总结,配置CruiseControl定时运行涉及以下几个关键步骤:安装CruiseControl、编写`cruisecontrol.xml`配置文件、设定构建触发器、定义构建步骤、配置监控与...

    cruisecontrol配置文件.rar

    `build.xml` 是Ant构建脚本,它是CruiseControl执行构建任务时调用的。Ant是一个Java语言编写的构建工具,它使用XML格式来描述构建过程,包括编译、测试、打包等步骤。在`build.xml`中,你可以定义目标(targets)和...

    利用CruiseControl软件进行持续集成

    安装之后,CruiseControl预先配置了一个配置文件,轮询CVS(或其它版本控制系统)存储库并执行ANT构建脚本。服务环境不需要安装Web服务器,CruiseControl已经内嵌了Jetty web服务程序。 3.CruiseControl的配置 当...

    CruiseControl+SVN+Maven+Tomcat持续集成环境搭建

    安装完成后,运行安装目录下的CruiseControl.bat启动CruiseControl,通过访问 http://localhost:8080/dashboard 检查安装是否成功,如果看到示例项目connectFour,说明CruiseControl已成功运行。 **四、VisualSVN-...

    持续集成之CruiseControl.rb

    3. **启动**:使用`cruise control start`命令启动服务,`cruise control stop`则停止服务。 ### 四、CruiseControl.rb的工作流程 1. **检查源码仓库**:CruiseControl.rb定期检查源码仓库是否有新的提交。 2. **...

    CruiseControl使用总结

    **CruiseControl 使用总结** CruiseControl 是一个开源的持续集成工具,主要用于自动化软件构建、测试和部署过程。它的核心理念是通过频繁地构建项目,及时发现并解决代码中的问题,从而提高软件开发效率和质量。这...

    CruiseControl使用指南.rar

    1. **CruiseControl简单使用介绍**:这部分可能涵盖了CruiseControl的基本操作,如安装、启动服务以及配置基本的构建任务。乘风破浪的百度空间文章可能以图文并茂的方式解释了这些概念,使初学者快速上手。 2. **...

    Cruisecontrol

    - 构建响应:构建代理执行构建任务后向主控节点返回构建结果。 #### 五、CruiseControl的配置文件 CruiseControl的配置文件中包含了对构建代理的详细配置,例如: ```xml &lt;cruisecontrol&gt; &lt;!-- 具体配置细节 -...

    cruisecontrol+maven2配置

    这是一项在软件开发过程中非常关键的技术实践,它能够自动检测代码库中的更新,并自动执行构建、测试以及部署等任务,从而确保项目的稳定性和质量。 ### Maven2+Subversion+CruiseControl配置详解 #### 1. Maven2...

    CruiseControl学习教程.pdf

    CruiseControl是一款持续集成工具,它能够自动化软件构建、测试和发布的过程,是开发者进行敏捷开发和持续集成的重要工具。本教程将详细讲解CruiseControl的学习与实践。 **第一章 CruiseControl实践** 1.1 Cruise...

Global site tag (gtag.js) - Google Analytics