Jenkins i kod powrotu z partii okien

Używam zadania Jenkinsa (na komputerze z systemem Windows), aby skompilować jakiś kod dla różnych celów poprzez Ant. Aby to zrobić, zawijam wywołanie do celu ant w pętli wsadowej (Windows) w następujący sposób:

@echo off
for %%t in (target1 target2 target3) do (
  ant -f build.xml build -DPARAM_TARGET=%%t
)

To był mój pierwszy pomysł ... ale kody te prowadzą do udanej kompilacji, nawet jeśli (np.) Cel1 nie powiódł się. W związku z tym umieściłem kilka kolejnych wierszy w kroku budowania partii systemu Windows, aby uzyskać więcej informacji. Mam też checekdout kodu, aby uzyskać tę samą przestrzeń roboczą niż Jenkins na moim komputerze lokalnym i dodać test.bat, aby sprawdzić, czy kod wsadowy systemu Windows może w ogóle działać.

@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%
  )
)

Testowanie tego na moim lokalnym komputerze z systemem Windows pokazuje oczekiwane zachowanie - tutaj na sukces:

BUILD SUCCESSFUL
Total time: 3 seconds
ELVL: 0
PROCEED: 0

A w przypadku awarii:

BUILD FAILED
C:\Work\...
C:\Work\...

Total time: 0 seconds
ELVL: 9009
ABORT: 9009

Ten sam kod na Jenkins to:

BUILD FAILED
C:\Work\...
C:\Work\...

Total time: 4 seconds
ELVL: 0
PROCEED: 0

Po pewnym czasie używania google ujawnia, że ​​kod powrotu z wywołania celu Ant nie jest poprawnie przekazany do środowiska Java, z którego Jenkins wykonuje połączenia. Przetestowałem to w ten sposób za pomocą „call” lub „set ERRORLEVEL = 1”, ale nie znalazłem jeszcze rozwiązania.

Ktoś ma pomysł? Umieść pętlę (target1-3) w skrypcie systemowym i podaj go ręcznie - czy to działa?

pozdrowienia

questionAnswers(2)

yourAnswerToTheQuestion