我使用 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
使用 google 一段时间后发现,调用 Ant 目标的返回代码未正确传递到 Jenkins 执行调用的 java 环境。我已经测试过使用“call”或“set ERRORLEVEL=1”这样的东西,但还没有找到解决方案。
有人有主意吗?
将循环(target1-3)放入系统groovy脚本中并手动处理callc - 这有效吗?
Regards