我遇到了以下问题:我的项目有一个make_all.bat
文件,可以执行以下几个构建:
call make_first_component.bat
if %ERRORLEVEL% gtr 0 ( exit /b %ERRORLEVEL% )
call make_second_component.bat
if %ERRORLEVEL% gtr 0 ( exit /b %ERRORLEVEL% )
该脚本中没有其他行(echo
命令除外)。
现在,当我通过双击或从命令行手动调用该脚本,并且make_first_component.bat执行exit /b 1
之类的操作时,make_all.bat
将按预期退出。
当我从jenkins作业(下面的代码)调用脚本时,make_all.bat
继续第二个组件,即使第一个组件失败。
如果我然后使用此行为登录构建从属并手动启动批处理文件,则在第一个组件失败时退出。
那么詹金斯做了什么打破了%ERRORLEVEL%
概念呢?
PS:我已尝试使用setlocal enabledelayedexpansion
,然后使用!ERRORLEVEL!
,但它始终为0.
注意:jenkins作业有一个“执行Windows批处理命令”步骤,如下所示:
cd %WORKSPACE%\src\bat
echo Setting up Visual Studio environment
call "%VS120COMNTOOLS%..\..\VC\vcvarsall.bat" amd64
echo Building Project
call make_all.bat
if %ERRORLEVEL% gtr 0 ( exit /b %ERRORLEVEL% )
(这是完整的一步)
答案 0 :(得分:1)
当覆盖ERRORLEVEL时会发生此效果。
样品
set errorlevel=0
cd ThisDoesntExist
echo %errorlevel%
set "errorlevel="
echo %errorlevel%
输出
0
1
结论:使用set "errorlevel="
,您可以恢复正常的%ERRORLEVEL%
行为