如何 return Matlab 的退出状态到 Jenkins 控制台输出?

How to return exit status of Matlab to Jenkins console output?

到目前为止,我已经尝试使用 Jenkins 触发 matlab 并做了一些 test.But 我想让 Jenkins 知道如果我们在 matlab 测试中出现错误,并与 Jenkins.So 控制台通信输出将失败。

Matlab version:2016b

所以我把 exit(1) 放在 matlab 的最后一行 script.But Jenkins 控制台输出仍然显示 SUCCESS.And 我在批处理命令行中使用 %errorlevel%,结果是 0 而不是我期待。

我试过在 beginning.Because 中使用 Start /wait 我使用 Windows 10.But 没有帮助。

下面是我的 Jenkins 批处理命令:

start /wait matlab.exe -wait -r -sd "D:\matlab" MyScript;exit -logfile OutputPrint.txt echo ExitCode is %errorlevel%

我希望如果测试管理器中的某些测试用例没有 pass.It 可以通知 Jenkins 并且控制台输出将失败。

在此先感谢您的帮助!

似乎在 R2019a 中引入了对从 matlab 提供退出或错误状态的官方支持。之所以这样说,是因为我在R2019a的在线参考中看到了,但是在R2018b中却不见了:

https://www.mathworks.com/help/releases/R2019a/matlab/ref/quit.html
对比
https://www.mathworks.com/help/releases/R2018b/matlab/ref/quit.html

然而,当我尝试它并且不提供 'force' 输入时,它似乎适用于旧版本的 matlab,例如对于 R2016b:

"C:\Program Files\MATLAB\R2016b\bin\matlab.exe" -wait -r "exit(10)"
echo %ERRORLEVEL%

这给了我 10,这是我所期望的。在您的代码中,我看到了一些可能会产生问题的事情。我建议从我的代码中的一些简单的东西开始,然后在必要时添加其他组件并验证错误级别仍然正常。

  1. 我看到你正在使用启动,这可能会阻止退出代码到达 Jenkins
  2. 明白了
    -r -sd "D:\matlab" MyScript;exit

因为要执行的命令应该紧跟在 -r 之后,我想你的意思是:

    -sd "D:\matlab" -r MyScript;exit
  1. 最后因为matlab命令后的命令"echo",errorlevel将来自echo命令。因此,如果您希望 Jenkins 从 MATLAB 命令获取错误级别,但您确实希望在 matlab 之后 运行 某些内容,您应该将其捕获在一个单独的变量中,并在退出脚本之前 "reset" 错误级别, 例如:
"C:\Program Files\MATLAB\R2016b\bin\matlab.exe" -wait -r "exit(10)"
SET MATLABERROR=%ERRORLEVEL%
echo ExitCode is %ERRORLEVEL%
SET ERRORLEVEL=%MATLABERROR%