Teamcity не обнаруживает сбои msbuild и nUnit при выполнении из powershell

Я написал сценарий сборки, используя psake, который запускаю в Teamcity.

У меня Teamcity 6.0, поэтому я запускаю psake из .cmd, но не думаю, что это что-то меняет.

Все работает нормально, но у меня две проблемы.

  1. Nunit не взаимодействует с Teamcity, поэтому, когда тест не проходит, Teamcity говорит, что все в порядке.

  2. MsBuild ведет себя так же. Несмотря на то, что сборка не удалась, Teamcity сообщает об успехе.

Я хотел бы знать, как заставить Teamcity обнаруживать эти сбои.

Вот мой пример сценария: https://github.com/MikeEast/BuildTests/blob/master/build/build.ps1


person Mikael Östberg    schedule 22.10.2011    source источник


Ответы (2)


Вам, вероятно, потребуется самостоятельно уведомить Teamcity через простой, но элегантный создать систему уведомлений о статусе.

Например, вы можете вывести следующее сообщение на стандартный вывод во время сценария powershell.

##teamcity[buildStatus status='FAILURE' text='Some error message']
person sylvanaar    schedule 22.10.2011
comment
И, к счастью для вас, TeamCity только что опубликовала библиотеку для создания этих сообщений! - person Anthony Mastrean; 23.10.2011
comment
Это работает, но я надеялся на что-то волшебное. Например, у mspec.exe есть переключатель --teamcity, который производит это. Я надеялся, что у тестировщика TeamCity Nunit было то же самое. - person Mikael Östberg; 24.10.2011

То, как у меня работает TeamCity (с TeamCity версии 6.5.4, которую я должен добавить), заключается в использовании модуля TeamCity, который предоставляется в загрузке psake.

Добавьте это в свой скрипт:

...
Import-Module "$build_dir\psake\teamcity.psm1"

#Tasks here
...
Remove-Module teamcity

#End Of File

У меня есть папка сборки, в которую я поместил модуль, чтобы все мои сборки могли получить к ней доступ.

Потом заработало из коробки.

Однако я не использую встроенный NUnit runner, я также поместил консоль NUNit в свою папку сборки, а затем вызываю ее с каждой сборкой UnitTest:

Task Test -depends Build {
    $testAssemblies = (get-childitem $base_dir -r -i "*UnitTests.dll" -exclude "*.config" -Name | Select-string "bin")
    foreach($test_asm_name in $testAssemblies) {
        $full_test_assembly_name = "$base_dir\$test_asm_name"
        Exec { invoke-expression "$nunitconsole_path $full_test_assembly_name" }
    }
}
person ArtificialGold    schedule 09.11.2011
comment
Мы выполняем xunit следующим образом: exec { & $lib_dir\xunit\xunit.console.clr4.exe $($p.BuildDir)\$($p.Name).dll /nunit $($p.BuildDir)\results .xml; } и это прекрасно работает. Однако сборка всегда завершается успешно, тогда как при возникновении проблемы с тестом она должна завершиться ошибкой. - person Blake Niemyjski; 18.12.2013