我试图在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输出。
提前感谢您的帮助。
答案 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。
编辑:
以上对我有用。但是这里还有其他一些我要检查的东西,因为当我设置它们时它们已经被我弄到了 - 也许它们也会帮助你:
user1
并将MATLAB称为user1
,但MATLAB已获得user2
许可。如果在这种情况下使用-nodesktop
调用MATLAB,它将无声地失败(甚至可能会出现一个僵尸MATLAB进程,带有一个看不见的许可证错误对话框,你只能从任务管理器退出)-logfile \path\to\logfile.txt
添加到MATLAB命令中,该命令可以诊断某些问题。您还可以使用startup.m
文件和/或finish.m
文件 - 这些文件应该在启动时(在构建命令之前)和退出之前(在构建命令之后)运行。最后,您可以尝试使用构建命令对文件系统执行简单的操作,而不是disp
(这将诊断它是否是MATLAB运行的问题,或Jenkins收集其输出的问题)。