Jenkins不读取ERRORLEVEL。

10 浏览
0 Comments

Jenkins不读取ERRORLEVEL。

我正在Jenkins中测试一个简单的构建过程;Build部分有一个执行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报告测试成功或失败?它似乎在运行时不检查该变量,只在执行脚本开始时检查。这对于脚本可能改变变量值来说是没有用的。

0
0 Comments

Jenkins not reading ERRORLEVEL的问题出现的原因是直接操作%ERRORLEVEL%这个自动变量是不正确的,尤其是因为对SYSTEM环境的写入权限需要管理员权限。正确的方法是通过调用Quit方法传递整数值来自动填充%ERRORLEVEL%变量。例如,一个包含WScript.Quit 3的VBScript脚本被批处理脚本调用,应该产生以下输出:

C:\>C:\path\to\your.cmd
0
3

如何测试为什么这个方法不起作用呢?批处理脚本和我的vbs脚本完全一样,而且我的vbs脚本以WScript.Quit 3结束,但是它仍然显示ERRORLEVEL是1。

这可能是因为在其他地方手动设置了%ERRORLEVEL%。像我之前说的那样:不要这样做。%ERRORLEVEL%是一个自动变量。请不要操作它。

嗯,不确定发生了什么事情,打开一个新的命令窗口,它按预期工作了。我昨天一定是在试验时手动设置了它。谢谢。

0