Настройте задание тестовой сборки в Hudson, которое определяет, когда make не может скомпилировать

Я создал «фристайл-проект» в Hudson, который проверяет мой исходный код из репозитория svn. Затем я добавил «шаг оболочки» для построения кода:

echo "# $JOB_NAME: $BUILD_ID" >log
cd to/my/path/
qmake &>>$WORKSPACE/log
make &>>$WORKSPACE/log

После запуска теста Хадсон говорит, что все прошло успешно. Когда я смотрю на консольный вывод сборки, я обнаруживаю:

In file included from src/tut.h:47,
                 from src/tut3module.cpp:1:
src/log.h:69: error: ‘uint8_t’ has not been declared
make: *** [obj/tut3module.o] Fehler 1
Finished: SUCCESS

Почему Hudson не распознает эту ошибку? Как мне настроить работу?

Дайте мне знать, если вам понадобится дополнительная информация о моей конфигурации!

Спасибо за вашу помощь!


person Simon    schedule 02.12.2010    source источник


Ответы (3)


Хадсон использует код ошибки этапа сборки, чтобы определить, был ли этап сборки успешным или неудачным. Весь ваш шаг сборки будет преобразован в один скрипт. Если вы не вызываете exit где-нибудь в скрипте, код выхода последней команды скрипта становится кодом выхода скрипта.

См. Следующий сценарий

copy readme.txt dd:
type readme.txt

Предположим, что файл readme.txt существует. Копирование завершится ошибкой с кодом 1, потому что dd: - неизвестное устройство. Команда type завершится успешно, и, следовательно, сам шаг сборки вернет успех. Поэтому либо разделяйте команды сборки, либо проверяйте код ошибки после каждой команды. Системный администратор порекомендовал мне третий подход: запустить сценарий и проверить результаты. Итак, в вашем случае ваша сборка должна работать всякий раз, когда существуют ваши артефакты сборки.

Конечно, вы также можете использовать плагин парсера журналов, как упоминалось в sagar. Но если вы можете этого избежать, используйте сценарий, который проверяет коды ошибок, а не полагайтесь на анализатор журнала. Кстати, есть команды, которые отклоняются от стандарта и возвращают ненулевой код ошибки даже в случае успеха.

person Peter Schuetze    schedule 03.12.2010

Хадсон не распознает ошибку, вероятно, потому, что на этапе сборки вы перенаправляете как stdout, так и stderr для qmake и вносите в журнал:

qmake &>>$WORKSPACE/log
make &>>$WORKSPACE/log

Попробуйте удалить перенаправления и посмотрите, изменится ли это. Так:

echo "# $JOB_NAME: $BUILD_ID" >log
cd to/my/path/
qmake
make

В любом случае у вас есть второй вариант:

Вы можете использовать это: http://wiki.hudson-ci.org/display/HUDSON/Log+Parser+Plugin

Вы можете настроить его так, чтобы он распознавал такие слова, как «ошибка» и «сбой», и приводил к сбою сборки. Он использует регулярное выражение для обнаружения слов, поэтому у вас есть полный контроль над тем, что он использует для обнаружения сбоя.

person Sagar    schedule 02.12.2010
comment
В общем, Hudson НЕ полагается на результат. Так что вы можете перенаправлять их сколько угодно. Хадсон полагается только на код возврата выполненного скрипта. Исключением является встроенная поддержка определенных шагов / инструментов сборки. К ним относятся maven и ant. Дополнительные плагины, расширьте поддержку таких инструментов, как плагин qmakebuilder (wiki.hudson-ci. org / display / HUDSON / qmakebuilder + Plugin). - person Peter Schuetze; 03.12.2010
comment
Ааа ладно. Я думал, что результат qmake и / или make повлияет на код возврата выполненного скрипта. Но это полезно знать! - person Sagar; 03.12.2010

Попробуйте создать два отдельных этапа сборки в Hudson. Сделайте первым шагом компиляцию. второй шаг запускает шаги. Если какой-либо из этих шагов не удастся, Hudson должен потерпеть неудачу.

person Bryan Oakley    schedule 02.12.2010