PowerShell 退出代码在 TeamCity 8 构建步骤中始终为 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][Step 2/3] Process exited with code 0
如果脚本中有任何失败,我希望该步骤失败。我怎样才能做到这一点?
我刚发现这个post:
PowerShell runner - script fails but the build succeeds - 'Process exited with code 0'
TeamCity 中存在错误,这意味着未拾取非零 PowerShell return 代码。
建议的解决方案是在检测到生成日志中的某些文本输出时创建一个生成失败条件。
但是,我的解决方案涉及不同的东西。
在 catch 块中,您只需使用 Write-Error cmdlet:
catch
{
Write-Error -Exception $_.Exception
}
那么您必须确保在 TeamCity 中正确设置了两件事:
首先,构建步骤错误输出应该设置为错误,而不是警告:
其次,在构建失败条件屏幕中,确保检查了构建运行器记录的错误消息:
假设您正在使用 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
语句之前的模块。
我们正在使用 TeamCity Enterprise 8.0.5。
我有一个运行 PowerShell (.ps1) 脚本的 TeamCity 构建步骤,如下所示:
try
{
# Break something
$a = 1 / 0
}
catch
{
Exit 1
}
尽管如此,在构建日志中,该步骤成功并以代码 0 退出。
[10:02:18][Step 2/3] Process exited with code 0
如果脚本中有任何失败,我希望该步骤失败。我怎样才能做到这一点?
我刚发现这个post:
PowerShell runner - script fails but the build succeeds - 'Process exited with code 0'
TeamCity 中存在错误,这意味着未拾取非零 PowerShell return 代码。
建议的解决方案是在检测到生成日志中的某些文本输出时创建一个生成失败条件。
但是,我的解决方案涉及不同的东西。
在 catch 块中,您只需使用 Write-Error cmdlet:
catch
{
Write-Error -Exception $_.Exception
}
那么您必须确保在 TeamCity 中正确设置了两件事:
首先,构建步骤错误输出应该设置为错误,而不是警告:
其次,在构建失败条件屏幕中,确保检查了构建运行器记录的错误消息:
假设您正在使用 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
语句之前的模块。