如果上一个在Azure Pipeline版本中存在错误,请跳过一个阶段

时间:2020-05-20 12:19:23

标签: azure-devops azure-pipelines-release-pipeline

我有一个非常简单的Azure Pipeline版本,如果上一个版本中有任何错误,我只想跳过一个阶段。我已经检查过https://docs.microsoft.com/en-us/azure/devops/pipelines/process/conditions?view=azure-devops&tabs=classic

将“测试”作业设置为“仅在所有先前的作业都成功时才运行”无济于事

我的主要目标是,只要在前一个条件中有特定条件,就跳过测试阶段,并且似乎不可能在各个阶段之间传递变量,也没有使用门,所以我不得不想到故意提高舞台上的错误。这些阶段运行一些PS脚本,我也不能因此使整个阶段失败

Screen shot

2 个答案:

答案 0 :(得分:0)

据我了解,您需要……feature。因此,如您所见,这是不被支持的。

您可以使用REST API来获取运行版本的状态并分析响应以验证issueType = Error是否存在任何问题。然后,在此脚本中,您需要调用exit 1。这不是理想的方法,但是可行。

$uri = "https://vsrm.dev.azure.com/thecodemanual/Devops manual/_apis/release/releases/$(Release.ReleaseId)?api-version=5.1"

Write-Host $(Release.ReleaseId)
Write-Host $uri

# Invoke the REST call
$result = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"}


$errors = @()

$result.environments |
    ForEach-Object { $_.deploySteps | 
        ForEach-Object { $_.releaseDeployPhases |
            ForEach-Object { $_.deploymentJobs |
                ForEach-Object { $_.tasks |
                    ForEach-Object { $errors += $_.issues | Where-Object { $_.issueType -eq "Error" } }}}}}

Write-Host $errors.Count

if($errors.Count -gt 0) {
    Write-Host Error
    exit 1
}

没有上面的步骤,我得到了:

enter image description here

此步骤如下:

enter image description here

答案 1 :(得分:0)

这些阶段运行一些PS脚本,我无法使整个阶段失败 从那边

您正在使用PowerShell任务还是类似任务?尝试编辑任务并启用Fail on Standard Error选项:

enter image description here

此后,如果将任何错误写入错误管道,则该任务将失败。同样在测试阶段的部署前条件下,请确保未选中trigger when ...复选框:

enter image description here