在TeamCity 8构建步骤中,PowerShell退出代码始终为0

时间:2015-09-16 09:07:01

标签: powershell teamcity

我有一个TeamCity构建步骤,它运行PowerShell(.ps1)脚本,如下所示:

try
{
    # Break something
    $a = 1 / 0
}
catch
{
    Exit 1
}

尽管如此,在构建日志中,步骤成功并以代码0退出。

  

[10:02:18] [步骤2/3]流程退出代码为0

如果脚本中有任何失败,我希望步骤失败。我怎样才能做到这一点?

我们正在使用TeamCity Enterprise 8.0.5。

2 个答案:

答案 0 :(得分:7)

我刚发现这篇文章:

PowerShell runner - script fails but the build succeeds - 'Process exited with code 0'

TeamCity中存在一个错误,表示未获取非零PowerShell返回代码。

建议的解决方案是在检测到构建日志中的某些文本输出时创建构建失败条件。

然而,我的解决方案涉及不同的事情。

在catch块中,您只需使用Write-Error cmdlet:

catch
{
    Write-Error -Exception $_.Exception
}

然后你必须确保在TeamCity中正确设置了两件事:

首先,构建步骤错误输出应设置为错误,而不是警告

Enter image description here

其次,在构建失败条件屏幕中,确保选中由构建运行器记录的错误消息:

Enter image description here

答案 1 :(得分:0)

假设您正在使用 psake ,并且如果构建脚本失败,您的目标是使构建失败。导入psake模块并调用构建脚本的脚本不会失败,因此TeamCity将其视为成功构建。

如果第二个脚本失败,请将此代码添加到第一个脚本中,以使构建失败。

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

请勿在{{1​​}}语句之前删除该模块。