gpt4 book ai didi

windows - 为什么 exit/b 从 Jenkins(但其他任何地方)调用时不能正常工作?

转载 作者:可可西里 更新时间:2023-11-01 13:46:42 24 4
gpt4 key购买 nike

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

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

关于windows - 为什么 exit/b 从 Jenkins(但其他任何地方)调用时不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29922376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com