2010-12-02 3 views
0

Я создал «freestyle project» в hudson, который проверяет исходный код из репозитория svn. Затем я добавил «шаг оболочки», чтобы построить код:Задайте задачу сборки теста в hudson, которая обнаруживает, когда make не удается скомпилировать

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 не распознает эту ошибку? Как мне настроить работу?

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

Благодарим за помощь!

ответ

3

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

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

copy readme.txt dd: 
type readme.txt 

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

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

0

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

1

Хадсон не распознает ошибку, вероятно, потому, что в вашем шаге сборки, перенаправлении как стандартный вывод и стандартный поток ошибок для 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

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

+2

В целом, Хадсон НЕ полагается на выход. Поэтому вы можете перенаправить их столько, сколько хотите. Хадсон полагается только на код возврата исполняемого скрипта. Исключение составляет поддержка определенных шагов/инструментов сборки. К ним относятся maven и ant.Дополнительные плагины, увеличьте поддержку таких инструментов, как плагин qmakebuilder (http://wiki.hudson-ci.org/display/HUDSON/qmakebuilder+Plugin). – 2010-12-03 01:03:39

 Смежные вопросы

  • Нет связанных вопросов^_^