Это легко сделать в команде, если у вас есть отдельный шаг и отдельный скрипт сборки для каждого шага.Но если вы используете один единственный сценарий для выполнения каждой задачи (сборка, тестирование, пакетирование и развертывание) и только один шаг 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