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

前端之家收集整理的这篇文章主要介绍了windows – 为什么从Jenkins(但在其他地方)调用时,exit / b无法正常工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下问题:我的项目有一个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% )

(这是完整的一步)

解决方法

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

样品

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

输出

0
1

结论:设置“errorlevel =”可以恢复正常的%ERRORLEVEL%行为

猜你在找的Windows相关文章