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