我使用 Jenkins(在 Windows 机器上)作业通过 Ant 为不同的目标编译一些代码。为此,我将对 ant 目标的调用包装在一个(Windows)批处理循环中,如下所示:
@echo off
for %%t in (target1 target2 target3) do (
ant -f build.xml build -DPARAM_TARGET=%%t
)
这是我的第一个想法……但是即使(例如)target1 失败,这些代码也会导致构建成功。因此,我在 windows 批处理构建步骤中添加了更多行以获得更多概述。此外,我还检查了代码以获得与 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
在使用谷歌一段时间后,它显示调用 Ant 目标的返回代码没有正确传递给 Jenkins 进行调用的 java 环境。我已经测试过使用“call”或“set ERRORLEVEL=1”之类的东西,但还没有找到解决方案。
有人有想法吗?将循环(target1-3)放入系统 groovy 脚本并手动处理 callc - 这行得通吗?
问候