Msbuild 在TeamCity中获取构建步骤退出代码

Msbuild 在TeamCity中获取构建步骤退出代码,msbuild,teamcity,msdeploy,Msbuild,Teamcity,Msdeploy,我有一个包含许多构建步骤的构建,这些步骤使用msdeploy通过MSBuild脚本编译、运行测试和打包应用程序。 目前,如果我的任何测试失败,包仍会生成,但是我希望生成在失败点停止,或者能够将变量传递到作为测试/编译阶段的退出代码的MSBuild脚本中,并基于该变量的值创建包。 目前,我无法找到任何包含此信息的变量。Set 如果为true,则当其中一个项目无法生成时,将不再生成其他项目 将要建造 此外,定义并有条件地设置如果每个步骤都有单独的步骤和单独的构建脚本,那么在teamcity中很容易做

我有一个包含许多构建步骤的构建,这些步骤使用msdeploy通过MSBuild脚本编译、运行测试和打包应用程序。 目前,如果我的任何测试失败,包仍会生成,但是我希望生成在失败点停止,或者能够将变量传递到作为测试/编译阶段的退出代码的MSBuild脚本中,并基于该变量的值创建包。 目前,我无法找到任何包含此信息的变量。

Set

如果为true,则当其中一个项目无法生成时,将不再生成其他项目 将要建造


此外,定义并有条件地设置

如果每个步骤都有单独的步骤和单独的构建脚本,那么在teamcity中很容易做到这一点。但是,如果您使用一个脚本来完成每一件事情(构建、测试、打包和部署),并且只使用一个teamcity步骤来调用脚本,那么这将变得非常困难,因为您将不得不添加大量的try-and-catch,这将不适用于不可捕获的错误

我建议使用
psake
。要使用psake,你需要有两个脚本。第一个是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

-对不起,我应该解释一下我的设置。我有一个sln运行程序来进行编译,MSTest运行程序来运行测试,MSBuild运行程序来进行打包。我想要的是sln运行程序和/或mstest运行程序的输出,以传递到msbuild运行程序