Jenkins不读取ERRORLEVEL。
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报告测试成功或失败?它似乎在运行时不检查该变量,只在执行脚本开始时检查。这对于脚本可能改变变量值来说是没有用的。
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%
是一个自动变量。请不要操作它。
嗯,不确定发生了什么事情,打开一个新的命令窗口,它按预期工作了。我昨天一定是在试验时手动设置了它。谢谢。