Arhn - архитектура программирования

Как получить вывод Matlab в консоли Jenkins

Я пытаюсь интегрировать свои модульные тесты MATLAB в Jenkins в среде Windows. Моя проблема в том, что я не могу получить вывод MATLAB в своей консоли Jenkins даже для простого 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.

Заранее благодарю за любую помощь.


Ответы:


1

Наконец-то мне удалось получить вывод Matlab в консоли. Я следую совету, который дал в блоге @AndyCampbell @Guy Starbuck:

start /wait matlab -nodesktop -nosplash -minimize -wait -r "disp('Hello World!');exit" -logfile unittestlog.txt
set output=%errorlevel%
MORE unittestlog.txt
EXIT %output%

спасибо всем за вашу помощь.

16.06.2016
  • Звучит здорово, я рад, что ты в деле. Проблема пышных кавычек определенно пагубна. Кроме того, вы опередили меня, но я собирался предложить добавить файл журнала типа в ваш пакетный скрипт, но вы получаете то же самое с вашим вызовом MORE unittestlog.txt. Еще один интересный подход — указать параметр -logfile непосредственно на журнал jenkins. что-то вроде -logfile %JENKINS_HOME%\jobs\%JOB_NAME%\builds\%BUILD_NUMBER%\log. Я попробовал это быстро, и с положительной стороны он фактически печатает вывод во время выполнения задания. Однако это может конфликтовать с другими выходными данными задания Jenkins. 16.06.2016
  • Спасибо, Энди, я попробую этот подход. 17.06.2016
  • Отлично работает :) спасибо @AndyCampbell 20.06.2016

  • 2

    Вам нужно добавить -wait к команде MATLAB.

    В Windows Jenkins оборачивает команду в пакетный файл, который немедленно возвращается, и поэтому не фиксирует вывод (и, кстати, он также всегда будет завершаться со статусом успеха, даже если сам MATLAB этого не сделал).

    Добавляя -wait, он откладывает выход до тех пор, пока MATLAB не завершит работу, а также вернется с соответствующим статусом выхода.

    PS Также см. эту прекрасную серию сообщений от @AndyCampbell об интеграции MATLAB с Jenkins. .

    Редактировать:

    Вышеупомянутое работает для меня. Но вот еще несколько вещей, которые я бы проверил, так как они были для меня ложными, когда я его настраивал - возможно, они помогут и вам:

    1. Убедитесь, что шаг сборки является шагом «Выполнение пакетной команды Windows», а не шагом «Выполнение оболочки», так как установить и запустить утилиты unix в Windows сложно.
    2. Убедитесь, что у вас есть правильный тип кавычек в команде построения MATLAB. Это должны быть прямые кавычки, а не фигурные кавычки - как одинарные, так и двойные.
    3. Если вы скопировали и вставили команду сборки MATLAB в Jenkins, убедитесь, что вы случайно не вставили какие-либо лишние невидимые символы — попробуйте ввести команду непосредственно в Jenkins.
    4. Убедитесь, что нет проблем с лицензированием — например, Jenkins может работать как user1 и вызывать MATLAB как user1, но MATLAB имеет лицензию user2. Если вы вызовете MATLAB с помощью -nodesktop, в этом случае он просто молча выйдет из строя (и может даже оставить зомби-процесс MATLAB с невидимым диалоговым окном ошибки лицензии, из которого вы можете выйти только с помощью диспетчера задач)
    5. Чтобы помочь в устранении неполадок, вы можете добавить -logfile \path\to\logfile.txt к своей команде MATLAB, которая может диагностировать некоторые проблемы. Вы также можете использовать файл startup.m и/или файл finish.m — они должны запускаться при запуске (перед вашей командой сборки) и непосредственно перед выходом (после вашей команды сборки). Наконец, вы можете попробовать использовать команду сборки, которая делает что-то простое с файловой системой, а не disp (это позволит определить, является ли это проблемой с запуском MATLAB вообще или проблемой с Jenkins, собирающим его выходные данные).
    15.06.2016
  • Привет Сэм, спасибо за ваш ответ. Я получил тот же результат с опцией -wait. На самом деле, я уже пытаюсь следить за постом Энди Кэмпбелла (что, я согласен, превосходно). 15.06.2016
  • @toto Спасибо вам обоим за похвалу. Тото, звучит так, будто ответ Сэма вас заводит, не так ли? Обратите внимание, что вас также может заинтересовать параметр -logfile, который перенаправляет файл журнала, сгенерированный MATLAB, в файл, который можно сохранить как артефакт Jenkins и/или распечатать в стандартном формате для включения непосредственно в журнал Jenkins. 15.06.2016
  • @ Энди Нет, опция -wait не решает мою проблему, я все еще не могу увидеть вывод Matlab (здесь «привет, мир») в соответствующей консоли заданий jenkins. Я знаю об опции -logfile. С этой опцией 'hello world' пишется в файле, но все равно не в консоли :( 15.06.2016
  • @toto это работает для меня - извините. Но посмотрите мое редактирование для некоторых дополнительных возможных советов. 15.06.2016
  • @Sam: еще раз спасибо за вашу поддержку. К сожалению, все эти пункты в порядке (кроме, может быть, 4-го, но я не знаю, как проверить пользователя, привязанного к Jenkins и к лицензии MATLAB). Чтобы уточнить мою проблему, я пытаюсь запустить некоторые модульные тесты с помощью скрипта (как описано в блоге Энди). Но в Jenkins не видно вывода MATLAB, и работа Jenkins в порядке, независимо от результатов моих тестов. Кроме того, я использую параметр -logfile, но ничего не регистрируется, тогда как он отлично работает, если я запускаю свой скрипт в командной строке. 15.06.2016
  • @toto Это может быть не проблема, но чтобы проверить, под каким пользователем работает Дженкинс, вы можете использовать Пуск->Администрирование->Службы, прокрутите вниз до Jenkins, а затем посмотрите в столбце «Вход в систему». Если это не то же самое, что и пользователь, для которого MATLAB лицензирован, вы можете щелкнуть его правой кнопкой мыши, выбрать «Свойства», а затем переключить пользователей. После этого вам может понадобиться запустить и остановить Дженкинса. Боюсь, я не думаю, что у меня есть какие-либо другие предложения - вам может понадобиться помощь парня из Дженкинса, а я действительно парень из MATLAB :) 15.06.2016
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..