繁体   English   中英

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

[英]PowerShell exit code is always 0 in TeamCity 8 build step

我们正在使用 TeamCity Enterprise 8.0.5。

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

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

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

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

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

我刚刚发现了这个帖子:

PowerShell 运行程序 - 脚本失败但构建成功 - '进程退出,代码为 0'

TeamCity 中存在一个错误,这意味着不会拾取非零的 PowerShell 返回代码。

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

但是,我的解决方案涉及不同的东西。

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

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

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

首先,构建步骤Error Output应该设置为error ,而不是warning

在此处输入图片说明

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

在此处输入图片说明

假设您正在使用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

不要在if语句之前删除模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM