0

我正在 Jenkins 中测试一个简单的构建过程;Build 部分有 Execute Windows 批处理命令

echo %ERRORLEVEL%
cscript C:\Users\user\Documents\test.vbs
echo %ERRORLEVEL%

我的 test.vbs 除了设置ERRORLEVEL环境变量之外什么都不做;我也试过用wscript.quit看看这是否对ERRORLEVEL

dim wShell
dim wSysEnv

set wShell = Wscript.CreateObject("WScript.Shell")
set wSysEnv = wShell.Environment("SYSTEM")

WScript.Echo "ERRORLEVEL=" & wSysEnv( "ERRORLEVEL" )
wSysEnv( "ERRORLEVEL" ) = 0
WScript.Echo "ERRORLEVEL=" & wSysEnv( "ERRORLEVEL" )
wSysEnv( "ERRORLEVEL" ) = 2
WScript.Echo "ERRORLEVEL=" & wSysEnv( "ERRORLEVEL" )
WScript.Quit 3

没有构建后操作控制台输出如下:

Started by user anonymous
Building in workspace C:\Program Files (x86)\Jenkins\jobs\TADS Host-Agent client\workspace
[workspace] $ cmd /c call C:\Users\user\AppData\Local\Temp\hudson4571524647235360597.bat

C:\Program Files (x86)\Jenkins\jobs\TADS Host-Agent client\workspace>echo 1 
1

C:\Program Files (x86)\Jenkins\jobs\TADS Host-Agent client\workspace>cscript C:\Users\user\Documents\test.vbs 
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation. All rights reserved.

ERRORLEVEL=0
ERRORLEVEL=0
ERRORLEVEL=2

C:\Program Files (x86)\Jenkins\jobs\TADS Host-Agent client\workspace>echo 1 
1

C:\Program Files (x86)\Jenkins\jobs\TADS Host-Agent client\workspace>exit 1 
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

如上面的输出所示,ERRORLEVEL在我启动脚本之前是 1。脚本成功设置ERRORLEVEL为 2 并以代码 3 退出。但是当我检查ERRORLEVEL脚本末尾的 时,它在启动时又回到了 1 .

我发现一些页面说环境变量只为当前进程和任何子进程设置;也就是说它们是会话环境变量。

在这种情况下,如何ERRORLEVEL设置 Jenkins 将测试报告为成功或失败?它似乎不会在运行时检查变量,仅在脚本执行开始时检查。这没有用,因为脚本可能会更改变量的值。

4

1 回答 1

1

%ERRORLEVEL%是一个自动变量,你不应该直接篡改它,因为对SYSTEM环境的写访问需要管理员权限。

%ERRORLEVEL%应该由传递给Quit方法的整数值自动填充。带有一行的 VBScriptWScript.Quit 3由批处理脚本调用,如下所示:

@echo off
echo %ERRORLEVEL%
cscript //NoLogo C:\path\to\your.vbs
echo %ERRORLEVEL%

应产生以下输出:

C:\>C:\path\to\your.cmd
0
3
于 2013-07-17T21:17:09.190 回答