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



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

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

这是我的结果:

C:JenkinsjobsrunAllTestsworkspace>matlab -nodisplay -r "disp('Hello World!');exit" 
C:JenkinsjobsrunAllTestsworkspace>exit 0 
Finished: SUCCESS

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

事先感谢您的任何帮助。

我最终设法将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%

感谢您的帮助。

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

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

通过添加-wait,它将延迟出口直到MATLAB完成,并且还将以适当的退出状态返回。

ps还请参见@AndyCampbell的这一出色的帖子,内容涉及将MATLAB与Jenkins集成。

编辑:

上述对我有用。但是我会检查的还有其他几件事,因为当我设置它时,它们对我来说已经吸引了我 - 也许他们也会为您提供帮助:

  1. 确保构建步骤是"执行Windows batch命令"步骤,而不是"执行shell"步骤,因为在Windows上安装并运行UNIX UTITIOL是很痛苦的
  2. 确保您在MATLAB构建命令中具有正确的报价标记类型。他们需要是直言,而不是卷曲的行情 - 单个和双人
  3. 如果您复制并将Matlab构建命令粘贴到Jenkins中,请确保您不会意外地粘贴任何额外的隐形字符 - 尝试将命令直接键入jenkins
  4. 确保没有许可问题 - 例如,Jenkins可能以user1运行,并将MATLAB称为user1,但MATLAB已获得user2的许可。如果您使用-nodesktop调用MATLAB,则在这种情况下,它将默默失败(甚至可能会留下僵尸Matlab进程,并带有一个无形的许可证错误对话框,您只能使用任务管理器退出)
  5. 为了协助故障排除,您可以将-logfile pathtologfile.txt添加到MATLAB命令中,该命令可以诊断一些问题。您还可以使用startup.m文件和/或finish.m文件 - 这些文件应在启动(构建命令之前)和退出之前(构建命令之后)运行。最后,您可以尝试使用对文件系统做一些简单的构建命令,而不是disp(这将诊断是否是MATLAB运行的问题,还是Jenkins收集其输出的问题)。
  6. )。

最新更新