Настройте тестовую сборку в hudson, которая определяет, когда make не может скомпилировать - PullRequest
0 голосов
/ 02 декабря 2010

Я создал «проект вольного стиля» в Хадсоне, который проверяет мой исходный код из репозитория 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

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

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

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

Ответы [ 3 ]

3 голосов
/ 03 декабря 2010

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

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

copy readme.txt dd:
type readme.txt

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

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

1 голос
/ 02 декабря 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+ Плагин

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

0 голосов
/ 02 декабря 2010

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

...