我正在使用以下ANT脚本运行tomcat:
<macrodef name="start-tomcat">
<sequential>
<exec executable="/bin/sh" >
<arg value="-c" />
<arg value='${tomcat.bin.dir}/startup.sh -Xms128M -Xmx512M' />
</exec>
</sequential>
</macrodef>
当我从shell运行tomcat启动脚本时,tomcat正常启动,我看到的输出如下:
Using CATALINA_BASE: /u/app
Using CATALINA_HOME: /u/app/3rdparty/apache-tomcat-6.0.33
Using CATALINA_TMPDIR: /u/app/temp
Using JRE_HOME: /usr/java/jre1.6.0_13
Using CLASSPATH: /u/app/3rdparty/apache-tomcat-6.0.33/bin/bootstrap.jar
我有两个问题:
- 我怎样才能告诉ant像上面那样向我显示输出?ant只在出现错误时向我显示输出
- 当我使用ant可执行文件tomcat从shell运行build.xml文件时,它确实启动了。当通过CI服务器运行构建文件时,特别是Jenkins(Hudson(tomcat不会启动
我发现很难理解如何使用<exec>
任务来运行shell脚本,是不是我做错了什么?
谢谢。
这个问题与这里描述的名为ProcessTreeKiller
的Jenkins特性有关。
基本上,Jenkins通过在流程树中搜索具有特定环境变量的流程,自动杀死作业生成的所有流程
我所要做的就是重写名为BUILD ID
的jenkins-env变量,它就工作了。我使用了一个Setenv插件来设置特定于构建的env-var。
执行这样的命令怎么样:
<exec executable="bash" >
<arg value="-c" />
<arg value='nohup ${tomcat.bin.dir}/startup.sh -Xms128M -Xmx512M &' />
</exec>
Here is how you can stop tomcat from Ant script:
build.properties文件:
#----------------------------------------------------
#Tomcat Configuration
#----------------------------------------------------
#Back-end Tomcat
tomcat.dir=${branch.dir}/../tomcat
tomcat.bin.dir=${tomcat.dir}/bin
tomcat.bootstrap.jar=${tomcat.bin.dir}/bootstrap.jar
tomcat.jvmarg=-Dcatalina.home
loadproperties文件
<property file="${basedir}/build.properties" />
<!-- Stop tomcat -->
<target name="stop-tomcat" description="Stops back-end tomcat server" depends="prepare">
<java jar="${tomcat.bootstrap.jar}" fork="true" spawn="false">
<jvmarg value="${tomcat.jvmarg}=${tomcat.dir}" />
<arg line="${arg.stop}" />
</java>
<echo>+---------------------------------+</echo>
<echo>| T O M C A T S T O P P E D |</echo>
<echo>+---------------------------------+</echo>
</target>
Also I have added an element called spawn set to "false", which print execution output onto console.
Hope this helps :)