当前位置:  开发笔记 > 编程语言 > 正文

Gitlab CI与MATLAB

如何解决《GitlabCI与MATLAB》经验,为你挑选了1个好方法。

我有gitlab CI运行测试一些脚本,我使用以下几行.gitlab-ci.yml来显示MATLAB构建的输出:

before_script:

test1:
 script:
   - matlab -nosplash -nodesktop -minimize -wait -logfile matlab-output.txt -r Model
   - type matlab-output.txt

这种方法在构建成功时非常有效,但是当它失败时却没有,因为第二个命令没有运行.我检查了gitlab-ci-runner,它没有'after_script'选项.你怎么解决这个问题?

注意:这是Windows.



1> Suever..:

我认为你的问题是双重的.部分原因是因为GITLAB不会调用您的type语句,而且MATLAB进程永远不会返回,因为脚本永远不会完成.

例如,在命令行键入以下内容:

# This one will fail and notice that it never ends
matlab -nodesktop -nosplash -minimize -wait -logfile log.txt -r 'disp(a); exit;'

这是因为MATLAB永远不能执行exit命令.

另一方面,在成功的情况下,它能够到达exit并因此返回.

# This one will pass
matlab -nodesktop -nosplash -minimize -wait -logfile log.txt -r 'disp(1); exit;'

我实际解决这个问题的方式是双重的.首先,我在try/catch语句中包装我试图调用的命令,然后将任何错误/异常转换为字符串格式并显示它们.

我在一个名为的文件中有这种东西 runtests.m

% runtests.m
exit_code = 0;

try
    Model
catch ME
    disp(getReport(ME))
    exit_code = 1;
end

% Ensure that we ALWAYS call exit
exit(exit_code);

然后我有一个bash脚本实际调用MATLAB并打印日志输出并返回从MATLAB返回的相同错误代码

# runtests.sh
LOGFILE=log.txt

matlab -nodesktop -nosplash -minimize -wait -logfile "$LOGFILE" -r 'runtests';
CODE=$?

cat "$LOGFILE"

exit $CODE

这里的额外好处是我的用户可以完全按照GITLAB CI在自己的机器上运行测试来运行测试.

然后我的.gitlab-ci.yml文件很简单

test1:
  script:
  - "runtests.sh"

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有