如何在Jenkins控制台中获取Matlab输出

时间:2016-06-15 09:05:12

标签: matlab unit-testing jenkins

我试图在Windows环境中将我的MATLAB单元测试集成到Jenkins中。我的问题是我无法在Jenkins控制台中获得MATLAB输出,即使是简单的disp('Hello World!')

我创建了一个Jenkins免费作业来执行以下批处理命令: matlab -nodisplay -r "disp('Hello World!');exit"

这是我的结果:

C:\Jenkins\jobs\runAllTests\workspace>matlab -nodisplay -r "disp('Hello World!');exit" 
C:\Jenkins\jobs\runAllTests\workspace>exit 0 
Finished: SUCCESS

当然,我想使用Jenkins执行一个脚本来运行多个单元测试。但问题是一样的,我无法捕获MATLAB输出。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

我终于设法在控制台中获取matlab输出。 我按照@Guy Starbuck在@AndyCampbell博客中给出的提示:

start /wait matlab -nodesktop -nosplash -minimize -wait -r "disp('Hello World!');exit" -logfile unittestlog.txt
set output=%errorlevel%
MORE unittestlog.txt
EXIT %output%

感谢所有人的帮助。

答案 1 :(得分:1)

您需要将-wait添加到MATLAB命令。

在Windows上,Jenkins将命令包装在一个立即返回的批处理文件中,因此不捕获输出(顺便说一句,即使MATLAB本身没有,它也总是以成功状态退出)。

通过添加-wait,它将延迟退出,直到MATLAB结束,并且它也将以适当的退出状态返回。

PS另见@AndyCampbell关于将MATLAB与Jenkins集成的this excellent series of posts

编辑:

以上对我有用。但是这里还有其他一些我要检查的东西,因为当我设置它们时它们已经被我弄到了 - 也许它们也会帮助你:

  1. 确保构建步骤是“执行Windows批处理命令”步骤而不是“执行shell”步骤,因为在Windows上安装和运行unix实用程序很痛苦
  2. 确保在MATLAB构建命令中使用正确类型的引号。它们需要是直引号,而不是卷曲引号 - 单引号和双引号
  3. 如果您将MATLAB构建命令复制并粘贴到Jenkins中,请确保您不会意外粘贴任何额外的不可见字符 - 尝试直接在Jenkins中键入命令
  4. 确保没有许可问题 - 例如,Jenkins可能正在运行user1并将MATLAB称为user1,但MATLAB已获得user2许可。如果在这种情况下使用-nodesktop调用MATLAB,它将无声地失败(甚至可能会出现一个僵尸MATLAB进程,带有一个看不见的许可证错误对话框,你只能从任务管理器退出)
  5. 为了帮助进行故障排除,您可以将-logfile \path\to\logfile.txt添加到MATLAB命令中,该命令可以诊断某些问题。您还可以使用startup.m文件和/或finish.m文件 - 这些文件应该在启动时(在构建命令之前)和退出之前(在构建命令之后)运行。最后,您可以尝试使用构建命令对文件系统执行简单的操作,而不是disp(这将诊断它是否是MATLAB运行的问题,或Jenkins收集其输出的问题)。