Azure DevOps 报告 PowerShell 任务已通过,即使退出代码为非 0

Dav*_*ard 10 powershell task azure-devops

在 Azure DevOps 中,我有一个运行 PowerShell 脚本的任务。在某些情况下,脚本应以非 0 代码退出,导致任务报告为失败。但是,Azure DevOps 无论如何都会报告任务已通过。

这是一个问题,因为如果该作业失败,我有一个后续作业应该运行,但由于误报而没有发生。

在此输入图像描述

脚本的相关部分显示,在屏幕截图的情况下,检测到退出代码1,这应该会导致脚本错误退出。

if ($exitCode -ne 0)
{
    Write-Output ("[Error] Failing task since return code was {0} while expected 0." -f $exitCode)
}
exit $exitCode
Run Code Online (Sandbox Code Playgroud)

该任务作为deployment作业的一部分运行,并且我确实将选项failOnStandardError设置为true

- task: AzurePowerShell@5
  displayName: Check Function App Version
  inputs:
    azureSubscription: ${{ parameters.serviceConnectionName }}
    scriptType: FilePath
    scriptPath: ${{ parameters.scriptsArtefactPath }}/Test-FunctionAppVersion.ps1
    scriptArguments: -Uri ${{ parameters.healthCheckUri }} -AuthHeaderName Authorization -AuthHeaderValue "$(healthCheckAuthHeaderValue)"
    failOnStandardError: true
    azurePowerShellVersion: LatestVersion
    pwsh: true
Run Code Online (Sandbox Code Playgroud)

如何让 Azure DevOps 遵守我的退出代码?

Lev*_*SFT 12

Azure PowerShell 任务似乎在从脚本文件捕获退出代码时存在问题,但它与内联脚本配合得很好。您可以将此问题报告给微软开发团队。希望他们尽快提供修复。

但是,您可以使用以下任一解决方法来修复它。

1、使用[Environment]::Exit($exitCode)代替exit. 见下文:

if ($exitCode -ne 0)
{
    Write-Output ("[Error] Failing task since return code was {0} while expected 0." -f $exitCode)
}
[Environment]::Exit($exitCode)
Run Code Online (Sandbox Code Playgroud)

2、如果 exitCode 不为 0,则使用logging命令手动使任务失败。 ##vso[task.complete result=Failed;]Failed见下文:

if ($exitCode -ne 0)
{
    Write-Output ("[Error] Failing task since return code was {0} while expected 0." -f $exitCode)
    Write-Host "##vso[task.complete result=Failed;]Failed"
}
exit $exitCode
Run Code Online (Sandbox Code Playgroud)