iteye_6040 2011-11-16 11:19
浏览 260
已采纳

CruiseControl 使用Ant启动tomcat后 cc为何不继续执行,手动关闭tomcat窗口,cc继续轮询下一次构建

因为项目需要做了一个CI服务器,使用的是CruiseContol+SVN+Ant,在CC的中我配置了两个ant的脚本,一个是执行build的脚本,一个是执行release的脚本,build的时间间隔目前设置为3分钟,release是每天往web服务器上将build.xml打出的最新war包部署一次,代码如下:
[code="java"]




[/code]

我单独只放build脚本时CC正常,每隔3分钟构建一次,但加入release脚本后就出现了问题,我release.xml脚本如下:[code="java"]


<!-- 清理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>


[/code]

因为这个脚本中有打开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全配置如下:
[code="java"]

    <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>[/code]
  • 写回答

6条回答 默认 最新

  • 爱上一条鱼 2011-11-16 14:24
    关注

    也就是说 要把release的task和build的task写在同一个xml里,也就是把release.xml里的task写到build里

    [code="java"]





    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 电脑开机过商标后就直接这样,求解各位
  • ¥15 mysql , 用自己创建的本地主机和用户名 登录不上
  • ¥15 关于#web项目#的问题,请各位专家解答!
  • ¥15 vmtools环境不正常
  • ¥15 请问如何在Ubuntu系统中安装使用microsoft R open?
  • ¥15 jupyter notebook
  • ¥30 informer时间序列预测
  • ¥20 SSR引物多态性分析
  • ¥15 大漠插件在Win11易语言注册调用和免注册灵异事件,VS上注册调用完全没问题
  • ¥15 Addressable缓存机制做热更新的问题