Повторить задачу на exec в Ant дает неверный результат - PullRequest
0 голосов
/ 03 октября 2018

У меня есть фрагмент кода в моем муравейнике build.xml

<retry retrycount="10" retrydelay="30000">
            <exec executable="${env.M2_HOME}/bin/mvn.cmd" output="@{log}" failonerror="true" resultproperty="res" timeout="@{timeoutmillis}" errorproperty="error">
                ...
            </exec>
</retry>
<echo message="${res}"/>

Я повторяю свою задачу cmd, если происходит сбой один раз до 10 раз.Но даже если это будет успешным после повторных попыток, значение, возвращаемое в res, равно 1, хотя это и успешная сборка.Я ожидаю, что это будет 0, как если бы это был УСПЕХ.

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Это не прямой ответ на вопрос, который я задал.Но, принимая во внимание то, что сказали CAustin и jdpjamesp, я читаю содержимое моего выходного журнала, чтобы увидеть, была ли команда сбойной или нет.

Команда cmd вернет 1, даже если она прошла после некоторого числа n сбоев,Но выходной журнал в случае mvn будет иметь «BUILD SUCCESS», только если команда пройдет в конце.Поэтому поиск этой строки работает для меня.Журнал не должен добавляться после каждого раза.

Так что я реализовал это -

<property name="pass.string" value="BUILD SUCCESS" />
<resourcecount property="pass.string.count">
    <fileset id="matches" file="@{log}">
    <contains text="${pass.string}" />
    </fileset>
</resourcecount>
<if>
    <equals arg1="${pass.string.count}" arg2="0" />
    <then>
         ..
    </then>
    <else>
        ..
    </else>
</if>
0 голосов
/ 03 октября 2018

Свойства в Ant являются неизменяемыми (они не являются переменными), поэтому даже если ваша задача exec в конечном итоге будет выполнена успешно, свойство результата уже будет установлено равным тому, что было получено при первом запуске.

Этого можно избежать, создав блок sequential и используя внутри него задачу local для управления областью действия своего свойства.

    <retry retrycount="10">
        <sequential>
            <local name="do.fail" />

            <input addproperty="do.fail" validargs="y,n" message="fail?" />

            <fail>
                <condition>
                    <equals arg1="${do.fail}" arg2="y" />
                </condition>
            </fail>
        </sequential>
    </retry>

Запуск приведенного выше примера будет запрашивать пользователя, пока не будет указано «n».в качестве ввода (или 10 попыток).

...