加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

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

发布时间:2020-12-14 05:43:36 所属栏目:Windows 来源:网络整理
导读:我有以下问题:我的项目有一个make_all.bat文件,它执行这样的几个构建: call make_first_component.batif %ERRORLEVEL% gtr 0 ( exit /b %ERRORLEVEL% )call make_second_component.batif %ERRORLEVEL% gtr 0 ( exit /b %ERRORLEVEL% ) 该脚本中没有其他行(
我有以下问题:我的项目有一个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%srcbat

echo Setting up Visual Studio environment
call "%VS120COMNTOOLS%....VCvcvarsall.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%行为

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读