Получить код завершения шага сборки в 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.

Другие вопросы по тегам