Я думаю, что ваша проблема в два раза. Частично это объясняется тем, что 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);
Тогда у меня есть Баш скрипт, который на самом деле делает вызов 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"
Боюсь для использования опции -nojvm, упомянутой, потому что многие из используемых нами скриптов имеют графику. –
Является ли сценарий Model записывающим файл matlab-output. txt, несмотря на провал? – Markon