windows - Windows 上的 Jenkins - Matlab 不退出

标签 windows matlab jenkins build continuous-integration

Jenkins freestyle 的以下命令在 Windows 环境中不会退出(永远运行)。但是,当我在 CMD 中运行相同的命令时,它会按预期工作。

matlab -nodesktop -nosplash -minimize -c "path_to_license" -r "run('path_to_run_all_tests_script')" -wait -logfile unittestlog.txt set output=%errorlevel% MORE unittestlog.txt EXIT %output%

我做错了什么?

编辑:

这是命令调用的 Matlab 脚本:

import matlab.unittest.TestSuite;

disp('Hello from TestSuite');
try
    suite = TestSuite.fromPackage('test','IncludingSubpackages',true);
    results = run(suite);
    display(results);
catch e
    disp(getReport(e,'extended'));
    exit(1);
end
exit(any([results.Failed])+1);

最佳答案

我的猜测是这是一个许可问题 - 您需要 Jenkins 以 MATLAB 许可中指定的相同用户身份运行(当然假设您的 MATLAB 许可是指定用户许可 - 如果它是并发的或命名机器许可证,请忽略我)。

如果是错误的用户,MATLAB 将启动,但会显示一个对话框,告诉您许可问题。但是,由于您已使用 -nodesktop 调用它,因此此对话框将不可见,并且 MATLAB 将永远作为“僵尸”进程徘徊,而不会向 Jenkins 发送返回值。如果您进入任务管理器,您可能会发现其中一个或多个闲置,您可以在那里强制退出它们。

请注意,如果您运行 MATLAB 进行单元测试或通过 Jenkins 自动构建,则应注意许可要求。如果您有指定用户许可证,则只允许该指定用户使用它,包括通过 Jenkins。只要您是唯一可以启动 Jenkins/MATLAB 作业的人,那很好 - 但如果您将 Jenkins 暴露给多个用户,所有人都可以启动 MATLAB 作业,那么您就违反了许可协议(protocol).如果您需要这样做,您真的应该获得 Jenkins 运行的并发许可证。但这是一个灰色地带,您可能需要与您的客户经理谈谈。

希望对您有所帮助!


编辑:我想您可能还想看一下您在测试脚本中使用的退出代码。您希望 MATLAB 在测试通过时以零成功代码退出,在测试失败或在测试期间发生错误时以非零失败代码退出。所以你可能希望你的最后一行是 exit(any([results.Failed]));,而不是 exit(any([results.Failed])+1);.

关于windows - Windows 上的 Jenkins - Matlab 不退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44946759/

相关文章:

windows - 使用 Windows API 更改文件权限

windows - 如何在批处理文件中将Windows路径转换为文件: URL,,适合SVN命令行使用

matlab:创建一个符号向量

c++ - 为什么单纯的C++矩阵乘法比BLAS慢100倍?

c++ - 在 Windows 通用应用程序中使用 curl

windows - TFS Git 存储库在 Windows 命令提示符下不断询问凭据

arrays - 最小化Matlab中数组列的总和

deployment - javax.security.auth.login.LoginException : unable to find LoginModule class: org. jboss.security.ClientLoginModule

java - Jenkins 工作区管理

jenkins - 我希望 Jenkins 工作每两周建立一次