Запусти кота из скрипта муравья

Я использую следующий скрипт 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>

когда я запускаю скрипт запуска 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

У меня две проблемы:

  1. Как я могу сказать муравью показать вывод, как указано выше? Муравей показывает только вывод, когда есть ошибка.
  2. Когда я запускаю файл build.xml из оболочки с исполняемым файлом ant, tomcat запускается. при запуске файла сборки через CI-сервер - в частности, не запускается tomcat Дженкинс (Хадсон).

Мне трудно понять, как использовать <exec> задача запуска сценариев оболочки, что-то я делаю не так?

Благодарю.

3 ответа

Решение

Проблема была связана с функцией Jenkins под названием ProcessTreeKiller описано здесь.

По сути, Jenkins автоматически убивает все процессы, порожденные заданием, путем поиска в дереве процессов процессов с определенной переменной среды.

Все, что мне нужно было сделать, это переписать переменную jenkins env BUILD ID и это сработало. Я использовал плагин 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 :) 
Другие вопросы по тегам