我有一个TeamCity构建步骤,它运行PowerShell(.ps1)脚本,如下所示:
try { # Break something $a = 1 / 0 } catch { Exit 1 }
尽管如此,在构建日志中,步骤成功并以代码0退出 .
[10:02:18] [步骤2/3]进程退出,代码为0
如果脚本中有任何失败,我希望步骤失败 . 我怎样才能做到这一点?
我们正在使用TeamCity Enterprise 8.0.5 .
我刚刚发布了这篇文章:
https://youtrack.jetbrains.com/issue/TW-21554
teamcity中存在一个错误,这意味着不会拾取非零的PowerShell返回码 .
建议的解决方案是在检测到构建日志中的某些文本输出时创建构建失败条件 .
但是,我的解决方案涉及不同的东西
在catch块中,您只需使用Write-Error cmdlet:
catch { Write-Error -Exception $_.Exception }
然后,您必须确保在TeamCity中正确设置了两件事:
首先,构建步骤Error Output应设置为error,而不是警告:
其次,在构建失败条件屏幕中,确保检查构建运行器记录的错误消息:
希望这有助于某人 .
假设您正在使用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语句之前删除模块 .
2 回答
我刚刚发布了这篇文章:
https://youtrack.jetbrains.com/issue/TW-21554
teamcity中存在一个错误,这意味着不会拾取非零的PowerShell返回码 .
建议的解决方案是在检测到构建日志中的某些文本输出时创建构建失败条件 .
但是,我的解决方案涉及不同的东西
在catch块中,您只需使用Write-Error cmdlet:
然后,您必须确保在TeamCity中正确设置了两件事:
首先,构建步骤Error Output应设置为error,而不是警告:
其次,在构建失败条件屏幕中,确保检查构建运行器记录的错误消息:
希望这有助于某人 .
假设您正在使用psake,并且如果构建脚本失败,您的目标是使构建失败 . 导入psake模块并调用构建脚本的脚本不会失败,因此teamcity将其作为成功构建 . 如果第二个脚本失败,请将此代码添加到第一个脚本中,以使构建失败 .
不要在If语句之前删除模块 .