我有以下问题:我的项目有一个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也会继续使用第二个组件.
如果我然后使用此行为登录构建从属并在那里手动启动批处理文件,则在第一个组件失败时退出.
那么jenkins做了什么打破了%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% )
(这是完整的一步)