问题描述
我使用的作业(在Windows计算机上),一个詹金斯编译一些code通过蚂蚁不同的目标。
这样做,我包调用Ant目标一(视窗)批循环这样的范围内:
关闭@echo
对于%%吨(目标1 TARGET2 target3)做(
蚂蚁-f build.xml构建-DPARAM_TARGET = %%Ť
)
这是我的第一个想法......但是这codeS导致一个成功的构建,即使(例如)目标1失败。所以我把一些线路的Windows批处理构建步骤,以获得更多的概述。此外,我已经checekdout了code,以获得比詹金斯有我的本地机器一样workingspace并添加test.bat的检查Windows批处理code可以在所有的工作。
关闭@echo
对于%%吨(目标1 TARGET2 target3)做(
蚂蚁-f build.xml构建-DPARAM_TARGET = %%Ť
回声ELVL:%ERRORLEVEL%
IF NOT%ERRORLEVEL%= = 0(
回声中止:%ERRORLEVEL%
退出/ B%ERRORLEVEL%
)ELSE(
回声继续:%ERRORLEVEL%
)
)
这个测试我的本地Windows机器上显示了预期的行为 - 在这里成功:
BUILD SUCCESSFUL
总时间:3秒
ELVL:0
继续:0
和失败:
构建失败
C:\\工作\\ ...
C:\\工作\\ ...总时间:0秒
ELVL:9009
中止:9009
这是詹金斯同样code做到这一点:
构建失败
C:\\工作\\ ...
C:\\工作\\ ...总时间:4秒
ELVL:0
继续:0
使用谷歌为它揭示了一会儿,从调用Ant目标回报code未正确传递给Java enviornment从那詹金斯做后来电。我身边有使用呼叫或设置ERRORLEVEL = 1这样的事情,测试,但还没有找到一个soloution呢。
任何人有一个想法?
放环(target1-3)到系统Groovy脚本和手动喊得的CALLC - 做这项工作。
问候
我觉得你的问题是因为你在一个for循环读取%ERROR_LEVEL%。
我认为你必须使用 SETLOCAL EnableDelayedExpansion
(ref is here)
Try to do something like this :
setlocal EnableDelayedExpansion
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!
)
)
It don't explain why it runs on your computer... maybe because the EnableDelayedExpansion is already set in your dos windows.
EDIT
In batch-file :
%var%
will be expanded when the code is parsed (i.e. before execution !)!var!
will be expanded when the code is executed
Since you are in a loop : %ERROR_LEVEL%
is expanded once (i.e. just before first execution). But what you need is to re-expand ERROR_LEVEL
for each iteration and that's the purpose of !ERROR_LEVEL!
syntax.
这篇关于从Windows批处理詹金斯和返回code的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!