Неоднозначная ошибка сборки TeamCity

У меня проблемы со сборкой для TeamCity. Когда я собираю проект локально, он компилируется правильно, однако при запуске TeamCity сборка завершается с ошибкой Build failure condition: Process exited with code 1.

У меня есть два отдельных проекта с одним и тем же состоянием отказа, и я даже не знаю, как начать диагностику проблемы. Один проект представляет собой библиотеку C#, созданную с помощью Visual Studio 2010 (и я использую VS Solution для компиляции этого проекта), а другой — с помощью Xamarin Studio.

Шаг сборки Xamarin Studio, который должен скомпилировать код, использует строку (не обращайте внимания на разрывы строк):

"C:\Program Files (x86)\Xamarin Studio\bin\mdtool.exe" build
"--project:MyProject" 
"%teamcity.build.checkoutDir/MySolution.sln"

Оба проекта компилируются в агенте сборки (при локальной компиляции с помощью Visual Studio или команды командной строки). Есть ли способ заставить агент сборки (т.е. запущенную службу) запустить конфигурацию сборки локально и протестировать оттуда или как?


person Blaze Phoenix    schedule 06.06.2013    source источник


Ответы (1)


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

Если ваше приложение достаточно сложное или имеет множество зависимостей, вам, вероятно, придется потратить несколько часов на написание скрипта сборки или редактирование файлов проекта. Если вы пишете скрипт сборки, просто измените задачу сборки в TC, чтобы выполнить скрипт сборки. Обычно это подход, который я использовал с TC, поскольку редактирование файлов проекта повлияет на ваши локальные отладочные сборки.

person evanmcdonnal    schedule 06.06.2013
comment
Для проекта Visual Studio ошибка заключается в том, что NUnit работает неправильно: - person Blaze Phoenix; 07.06.2013
comment
ПРИМЕЧАНИЕ. Это должна была быть исходная заметка. Мне не хватало файла для проекта Xamarin... Я чувствую себя глупо из-за этого. Для проекта Visual Studio ошибка заключается в том, что NUnit работает неправильно: ошибка, которую я получаю, заключается в том, что сборки не найдены. В настоящее время у меня есть шаг сборки для запуска теста NUnit; указывая на %teamcity.build.checkoutDir%***.dll. Без этого шага все работает. - person Blaze Phoenix; 07.06.2013
comment
@BlazePhoenix хорошо, так что это не так уж плохо, чтобы исправить. Это также одна из немногих тесно связанных проблем; 1) средство выполнения тестов NUnit вызывается неправильно (т. е. с правильным путем к dll, содержащим тестовые приспособления/случаи), 2) средство выполнения тестов вообще не находится в системе сборки/расположении размещения или 3) какая-то комбинация предыдущие два, такие как путь к NUnit Test runner, неверен в шагах сборки TC или в вашей локальной системе, это часть ваших ENV Vars, и его нет в системе сборки, поэтому он не может его найти. - person evanmcdonnal; 07.06.2013
comment
Хорошо, я понимаю, что вы имели в виду под ответом 1. Что касается ответа 2, вы утверждаете, что я должен включить компонент NUnit для запуска тестов или библиотеку, в которой находятся тесты? (Я полагал, что эта библиотека будет собрана вместе с остальными, так как это часть процесса сборки). Что касается ответа 3, я обнаружил, что люди искали установку переменной среды для NUnit, но теперь я не уверен, что именно я устанавливаю для этой переменной. - person Blaze Phoenix; 10.06.2013
comment
@BlazePhoenix Чтобы успешно запускать тесты NUnit как часть вашей сборки, средство запуска тестов NUnit должно находиться на сервере, на который сбрасываются двоичные файлы. Вы можете установить переменную в TC с путем к DLL или добавить ее к переменной PATH на сервере. Чтобы убедиться, что это работает правильно, я бы попытался вручную запустить NUnit в командной строке на сервере сборки. Если вы можете сделать это вручную, то добавить шаг сборки, чтобы сделать это, не составит труда. - person evanmcdonnal; 10.06.2013
comment
Итак, просто чтобы прояснить то, что вы говорите, мне нужно что-то для запуска модульного теста на сервере, а не в агенте сборки, чтобы TeamCity мог запускать тесты. Мне нужно будет установить переменную среды на сервере, чтобы она указывала на средство запуска теста. - person Blaze Phoenix; 10.06.2013
comment
@BlazePhoenix это зависит от того, куда были сброшены файлы, но да, более или менее. Если ваша папка находится в агенте сборки (я думаю, что это обычно), вам нужно выполнить шаг в агенте сборки. Я думаю, что есть некоторые задачи сборки специально для выполнения тестов, если нет, вы можете просто использовать задачу сборки командной строки. Добавьте это как шаг после сборки, задача будет не чем иным, как тем, что вы вводите в командной строке, чтобы запустить тестовый прогон с NUnit. - person evanmcdonnal; 11.06.2013
comment
Хорошо, спасибо за всю вашу помощь! Ты был для меня не чем иным, как благословением. - person Blaze Phoenix; 11.06.2013