Дженкинс и код возврата из пакета Windows
Я использовал задание Jenkins (на машине с Windows) для компиляции некоторого кода для различных целей через Ant. Для этого я обертываю вызов цели ant в цикле пакетной обработки (windows) следующим образом:
@echo off
for %%t in (target1 target2 target3) do (
ant -f build.xml build -DPARAM_TARGET=%%t
)
Это была моя первая идея ... но эти коды приводят к успешной сборке, даже если (например) target1 не удалось. Поэтому я добавил еще несколько строк на шаг пакетной сборки Windows, чтобы получить больше общего обзора. Кроме того, у меня есть checekdout код, чтобы получить ту же рабочую область, что и у Jenkins на моей локальной машине, и добавить test.bat, чтобы проверить, что пакетный код windows может работать вообще.
@echo off
for %%t in (target1 target2 target3) do (
ant -f build.xml build -DPARAM_TARGET=%%t
echo ELVL: %ERRORLEVEL%
IF NOT %ERRORLEVEL% == 0 (
echo ABORT: %ERRORLEVEL%
exit /b %ERRORLEVEL%
) ELSE (
echo PROCEED: %ERRORLEVEL%
)
)
Тестирование этого на моей локальной машине Windows показывает ожидаемое поведение - здесь в случае успеха:
BUILD SUCCESSFUL
Total time: 3 seconds
ELVL: 0
PROCEED: 0
И при неудаче:
BUILD FAILED
C:\Work\...
C:\Work\...
Total time: 0 seconds
ELVL: 9009
ABORT: 9009
Тот же код на Jenkins делает это:
BUILD FAILED
C:\Work\...
C:\Work\...
Total time: 4 seconds
ELVL: 0
PROCEED: 0
После использования Google некоторое время обнаруживается, что код возврата от вызова цели Ant неправильно передается в среду Java, откуда Дженкинс выполняет вызовы. Я тестировал с использованием "call" или "set ERRORLEVEL = 1" что-то вроде этого, но пока не нашел решения.
У кого-нибудь есть идея? Поместите цикл (target1-3) в системный сценарий groovy и вручную обработайте callc - это работает?
С уважением