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