【发布时间】:2012-02-16 10:31:32
【问题描述】:
我有一个包含多个构建步骤的构建,这些构建步骤通过 MSBuild 脚本使用 msdeploy 编译、运行测试和打包应用程序。 目前,如果我的任何测试失败,仍然会构建包,但是我希望构建在失败点停止,或者能够将变量传递给作为测试退出代码的 MSBuild 脚本/compile 阶段,并根据该变量的值创建包。 目前,我还没有找到任何包含此信息的变量..
【问题讨论】:
我有一个包含多个构建步骤的构建,这些构建步骤通过 MSBuild 脚本使用 msdeploy 编译、运行测试和打包应用程序。 目前,如果我的任何测试失败,仍然会构建包,但是我希望构建在失败点停止,或者能够将变量传递给作为测试退出代码的 MSBuild 脚本/compile 阶段,并根据该变量的值创建包。 目前,我还没有找到任何包含此信息的变量..
【问题讨论】:
如果为 true,则当其中一个项目无法构建时,不再有其他项目 将被建造。
此外,定义build parameters 并有条件地设置TeamCitySetStatus。
【讨论】:
如果您有一个单独的步骤和每个步骤的单独构建脚本,这在 teamcity 中很容易做到。但是,如果您使用一个脚本来完成每件事(构建、测试、打包和部署)并且只有一个 teamcity 步骤来调用脚本,那么这将变得非常困难,因为您将不得不添加大量的 try 和 catch 哪个不适用于不可捕获的错误。
我建议使用psake。要使用psake,您需要有 2 个脚本。第一个是由teamcity运行的。在第一个脚本中,您导入 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
【讨论】: