加入收藏 | 设为首页 | Life家族 | SCMLife | RMLife | PMLife | SQALife | TESTLife | 企业VIP专区 | 中文化荣誉殿堂

查看完整版本: 关于CruiseControl的问题讨论

wuxj888 2007-12-25 15:11

关于CruiseControl的问题讨论

大家好:
现在我们正用cuisecontrol工具,版本是2.7.1,感觉不错,我们是使用ant进行自动构建的,目前出现一个问题:

在build.xml中如果执行完tomcat没未关闭的话,cc就会停止,不会再执行,如果执行完关闭tomcat就可以自动执行,不知道什么原因
这是我其中的一段脚本,简化其间

        <target name="quickstart" depends="war" description="santation程序">
                <echo message="打包部署开始..."/>
                <antcall target="tomcat.stop" />
                <delete dir="${server.deploy}/${ant.project.name}" />
                <delete file="${server.deploy}/${ant.project.name}.war" />
                <copy todir="${server.deploy}" file="${release.warfile}" />
                <echo message="打包部署结束..."/>
                 [color=magenta][b] <antcall target="tomcat.start" />[/b] [/color]              
                <echo message="tomcat启动完毕..."/>

大家请看红色加粗部分,如果把这句去掉,系统运行就正常,否则执行完毕就不再执行,请大家看一下

i子休 2007-12-25 17:15

你的tomcat.start是怎么写的?

如果不是在后台启动的话,CruiseControl当然要等Tomcat返回才能继续执行

wuxj888 2007-12-25 17:23

i子休,谢谢你的回复!

我的tomcat.star写法如下:

[color=red][b]<target name="tomcat.start">
                <fail message="Must Set the right catalina.dir in build.properties">
                        <condition>
                                <not>
                                        <available file="${catalina.dir}" type="dir" />
                                </not>
                        </condition>
                </fail>
                <if>
                        <not>
                                <http url="http://${tomcat.server}:${tomcat.port}" />
                        </not>
                        <then>
                                <echo message="启动Tomcat Web Server..." />
                                <java classname="org.apache.catalina.startup.Bootstrap" spawn="true" fork="true">
                                        <jvmarg value="-Djava.endorsed.dirs=${catalina.dir}/common/endorsed" />
                                        <jvmarg value="-Dcatalina.base=${catalina.dir}" />
                                        <jvmarg value="-Dcatalina.home=${catalina.dir}" />
                                        <jvmarg value="-Djava.io.tmpdir=${catalina.dir}/temp" />
                                        <arg value="start" />
                                        <classpath>
                                                <pathelement location="${catalina.dir}/bin/bootstrap.jar" />
                                        </classpath>
                                </java>
                                <waitfor maxwait="10" maxwaitunit="minute" checkevery="1" checkeveryunit="second">
                                        <and>
                                                <http url="http://${tomcat.server}:${tomcat.port}" />
                                        </and>
                                </waitfor>
                                <echo message="Tomcat Web Server已启动" />
                        </then>

                </if>

        </target>[/b][/color]但是我在单独执行ant tomcat.start时候很快就给我返回了,而cc一直就不返回,难道是我这个tomcat.start需要做什么修改吗?谢谢

i子休 2007-12-26 12:58

试着直接调用Tomcat的启动脚本,startup.sh或者startup.bat

通常不建议用手动加载Bootstrap类的方式来启动Tomcat

wuxj888 2007-12-26 16:48

改变tomcat方式,cc还是不能轮循执行

谢谢i木子的回复,我已经换成启动startup.bat脚本方式来运行,build.xml配置如下:

[color=red][b]<target name="tomcat.start" description="tomcat starting.....">
                <exec executable="${catalina.dir}/bin/startup.bat" spawn="true" vmlauncher="false">
                        <!--设置环境变量。比如JAVA_HOME等-->
                        <env key="CATALINA_HOME" value="${catalina.dir}" />
                        <arg line="/c start ${catalina.dir}/bin/startup.bat" />
                </exec>
        </target>[/b][/color]

目前我已经换成这种方式,经过我测试cc执行一遍完成之后后台抛出一个异常,然后也不再继续轮循执行了,异常如下:

[cc]十二月-26 16:31:20 ScriptRunner  - java.lang.NullPointerException
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.XmlLogger$TimedE
lement.access$200(XmlLogger.java:111)
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.XmlLogger.messag
eLogged(XmlLogger.java:430)
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.Project.fireMess
ageLoggedEvent(Project.java:2009)
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.Project.fireMess
ageLogged(Project.java:2029)
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.Project.log(Proj
ect.java:357)
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.Project.demuxOut
put(Project.java:1084)
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.DemuxOutputStrea
m.processBuffer(DemuxOutputStream.java:171)
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.DemuxOutputStrea
m.write(DemuxOutputStream.java:146)
[cc]十二月-26 16:31:20 ScriptRunner  -  at org.apache.tools.ant.DemuxOutputStrea
m.write(DemuxOutputStream.java:240)
[cc]十二月-26 16:31:20 ScriptRunner  -  at java.io.PrintStream.write(PrintStream
.java:412)
[cc]十二月-26 16:31:20 ScriptRunner  -  at sun.nio.cs.StreamEncoder$CharsetSE.wr
iteBytes(StreamEncoder.java:336)
[cc]十二月-26 16:31:20 ScriptRunner  -  at sun.nio.cs.StreamEncoder$CharsetSE.im
plFlushBuffer(StreamEncoder.java:404)
[cc]十二月-26 16:31:20 ScriptRunner  -  at sun.nio.cs.StreamEncoder$CharsetSE.im
plFlush(StreamEncoder.java:408)
[cc]十二月-26 16:31:20 ScriptRunner  -  at sun.nio.cs.StreamEncoder.flush(Stream
Encoder.java:152)
[cc]十二月-26 16:31:20 ScriptRunner  -  at java.io.OutputStreamWriter.flush(Outp
utStreamWriter.java:213)
[cc]十二月-26 16:31:20 ScriptRunner  -  at java.util.logging.StreamHandler.flush
(StreamHandler.java:225)
[cc]十二月-26 16:31:20 ScriptRunner  -  at java.util.logging.ConsoleHandler.clos
e(ConsoleHandler.java:98)
[cc]十二月-26 16:31:20 ScriptRunner  -  at java.util.logging.LogManager.resetLog
ger(LogManager.java:658)
[cc]十二月-26 16:31:20 ScriptRunner  -  at java.util.logging.LogManager.reset(Lo
gManager.java:641)
[cc]十二月-26 16:31:20 ScriptRunner  -  at java.util.logging.LogManager$Cleaner.
run(LogManager.java:204)

但我在自己执行ant启动tomcat命令没有问题,相关问题我也查过,但没有发现具体答案,请大家给予看一下,谢谢!

wuxj888 2007-12-26 17:28

手工关闭tomcat命令窗口,问题解决,如何回传信息

i木子,你好,我刚才又测试了一下,如果在tomcat启动之后我手工把弹出的命令窗体关闭的话(手工停止tomcat),cc就可以立即执行了,
如果不手工关闭他就不执行,您提到的


[color=red][b]你的tomcat.start是怎么写的?

如果不是在后台启动的话,CruiseControl当然要等Tomcat返回才能继续执行[/b][/color]


请问我如何把这这个传给cc,表明已经执行完毕,让他继续轮循呢?

这是我启动tomcat的脚本


<target name="tomcat.start" description="tomcat starting.....">
                <exec executable="${catalina.dir}/bin/startup.bat" spawn="true" vmlauncher="false">
                        <!--设置环境变量。比如JAVA_HOME等-->
                        <env key="CATALINA_HOME" value="${catalina.dir}" />
                        <arg line="/c start ${catalina.dir}/bin/startup.bat" />
                </exec>
        </target>


谢谢!

i子休 2007-12-27 09:16

[code]
<target name="tomcat.start">
        <exec executable="start">
                <env key="CATALINA_HOME" value="${catalina.dir}" />
                <arg value="${catalina.dir}/bin/startup.bat" />
        </exec>
</target>
[/code]

你写成这样试试看

wuxj888 2007-12-27 10:12

关于cc中启动tomcat问题,cc不继续执行

十分感谢i木子回复!
我使用您给的启动tomcat的写法,启动后后台报
[cc]十二月-27 09:51:02 ScriptRunner  - D:\cruisecontrol-bin-2.7.1\projects\sanit
ation\build.xml:372: Execute failed: java.io.IOException: CreateProcess: start t
omcat/bin/startup.bat error=2
的错误,tomcat也无法启动,我查了原因是在 executable="start"里面需要指定路径,如果改成这样
<target name="tomcat.start">
       [color=red]<exec executable="${catalina.dir}/bin/startup.bat">[/color]               
<env key="CATALINA_HOME" value="${catalina.dir}" />
                <arg value="${catalina.dir}/bin/startup.bat" />
        </exec>
</target>
在后台单独执tomcat.start就可以启动,但启动后后台一直等待不返回
tomcat.start:
     [exec] Using CATALINA_BASE:   tomcat
     [exec] Using CATALINA_HOME:   tomcat
     [exec] Using CATALINA_TMPDIR: tomcat\temp
     [exec] Using JRE_HOME:        C:\Java\jdk1.5.0_11


但在cc中还是报相同错误


[cc]十二月-27 10:01:24 ScriptRunner  - D:\cruisecontrol-bin-2.7.1\projects\sanit
ation\build.xml:458: The following error occurred while executing this line:
[cc]十二月-27 10:01:24 ScriptRunner  - D:\cruisecontrol-bin-2.7.1\projects\sanit
ation\build.xml:372: Execute failed: java.io.IOException: CreateProcess: tomcat\
bin\startup.bat tomcat/bin/startup.bat error=2

所以目前看不是这个问题,现在用了很多方法,各种启动tomcat的方式都试过了,但还是不行,最好方式就是执行完后CC收不到返回信息,不再继续执行,只能手工关闭启动的窗口cc就能继续执行,

<target name="tomcat.start" description="tomcat starting.....">
                <exec executable="${catalina.dir}/bin/startup.bat" spawn="true" vmlauncher="false">
                        <!--设置环境变量。比如JAVA_HOME等-->
                        <env key="CATALINA_HOME" value="${catalina.dir}" />
                        <arg line="/c start ${catalina.dir}/bin/startup.bat" />
                </exec>
        </target>



怀疑是不是cc对这种server启动是不是不支持呢?请给予解答!

i子休 2007-12-27 11:01

噢,你需要把catalina.dir改成绝对路径,或者在exec任务中加一个dir参数

我那个写法应该没问题的,start是Windows用来在后台运行程序的命令

wuxj888 2007-12-27 18:10

tomcat启动,cc不继续执行

已经试过了,还是不行,tomcat启动了,但还是没返回信息给cc,cc还是不执行,
估计是cc不支持这种方式???
网上有一个帖子
[url]http://confluence.public.thoughtworks.org/display/CC/Starting+a+server+with+cc[/url]
说可以解决,试过它的方法也不是

wangwen 2008-4-3 09:41

从来没做过这种方式启动tomcat 为什么要用CC调用ANT启动它?
页: [1]
查看完整版本: 关于CruiseControl的问题讨论