如果之前的任何任务失败,如何强制 Azure DevOps 管道失败?

How to force an Azure DevOps pipeline to fail if any previous tasks have failed?

我基于 YAML 的 Azure DevOps 管道包含多个任务,其中 continueOnError: true。我是故意这样做的,这样我就可以 运行 所有 测试套件,即使其中一些失败(每个任务 运行 是不同的测试套件)。目前,如果这些任务中的任何一个失败,构建将被标记为 'partially succeeded'。现在如何强制将构建标记为 'failed'?

我可能可以通过在每个任务失败时设置一个构建变量来手动执行此操作,然后在最后一步检查该变量的值。但是,如果管道中的任何先前步骤失败,强制构建失败的最简单方法是什么?

将这些任务之一添加到每个作业的末尾似乎可以解决问题:

- bash: |
    echo AGENT_JOBSTATUS = $AGENT_JOBSTATUS
    if [[ "$AGENT_JOBSTATUS" == "SucceededWithIssues" ]]; then exit 1; fi
  displayName: Fail build if partially successful

echo 行是可选的。请参阅 Azure 文档 here 重新调用代理变量 Agent.JobStatus 及其可以采用的值。

或者您可以使用 Azure 的内置 conditions 直接检查变量:

- bash: exit 1
  displayName: Fail build if partially successful
  condition: eq(variables['Agent.JobStatus'], 'SucceededWithIssues')

使 bash 任务 return 任何非零值都会导致它在满足 condition 时失败。