为什么从Jenkins(但在其他地方)调用时,exit / b无法正常工作?

时间:2015-04-28 14:29:06

标签: windows batch-file jenkins

我遇到了以下问题:我的项目有一个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% )

(这是完整的一步)

1 个答案:

答案 0 :(得分:1)

当覆盖ERRORLEVEL时会发生此效果。

样品

set errorlevel=0
cd ThisDoesntExist
echo %errorlevel%
set "errorlevel="
echo %errorlevel%

输出

  

0
  1

结论:使用set "errorlevel=",您可以恢复正常的%ERRORLEVEL%行为