Получить код завершения шага сборки в TeamCity
У меня есть сборка с несколькими шагами сборки, которые компилируют, запускают тесты и упаковывают приложение, используя msdeploy через скрипт MSBuild. В настоящее время, если какой-либо из моих тестов завершится неудачно, пакет все равно будет собран, однако я бы хотел, чтобы сборка остановилась в точке сбоя или могла передать переменную в скрипт MSBuild, который является кодом завершения теста /compile stage и создайте пакет на основе значения этой переменной. В настоящее время я не смог найти переменные, которые содержат эту информацию..
2 ответа
Это легко сделать в teamcity, если у вас есть отдельный шаг и отдельный скрипт сборки для каждого шага. Но если вы используете один сценарий для выполнения каждой задачи (сборка, тестирование, пакетирование и развертывание) и только один шаг teamcity для вызова сценария, то это становится довольно сложным, так как вам придется добавить много попыток и поймать какие не будет работать с ошибками без перехвата.
Я предлагаю использовать psake
, Использовать psake
вам нужно будет иметь 2 сценария. Первый - тот, которым управляет команда. В первом скрипте вы импортируете модуль psake и вызываете основной скрипт, который все делает за вас. Если второй сценарий потерпит неудачу в любом месте, он остановит сценарий (если у вас есть stoponfailure
политика powershell на ваших агентах). Второй сценарий остановится и вернется к первому сценарию. Но первый скрипт не будет считать его неудачным и покажет сборку как успешную. Чтобы преодолеть это, вы добавляете кусок кода в свой первый скрипт.
Import-Module .\psake\psake.psm1
Invoke-Psake .\build-steps.ps1 @args
if($psake.build_success -eq $false){
write-host "There was an error running psake script"
exit 1
}
Remove-Module psake
Код выхода Powershell всегда равен 0 на этапе сборки teamcity
Установите StopOnFirstFailure=true
Если это правда, когда один из проектов не удается построить, больше проектов не будет построено.
Кроме того, определите параметры сборки и условно установите TeamCitySetStatus.