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

sna*_*ark 13 azure-devops azure-pipelines azure-pipelines-tasks azure-pipelines-yaml

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

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

sna*_*ark 19

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

- bash: |
    echo AGENT_JOBSTATUS = $AGENT_JOBSTATUS
    if [[ "$AGENT_JOBSTATUS" == "SucceededWithIssues" ]]; then exit 1; fi
  displayName: Fail build if partially successful
Run Code Online (Sandbox Code Playgroud)

echo行是可选的。请参阅此处的Azure 文档,了解调用的代理变量Agent.JobStatus及其可以采用的值。

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

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

bash任务返回任何非零值将导致它在condition满足时失败。

  • @shivam 可能吧!我建议您将其作为一个单独的问题发布,并提供更多详细信息;。例如,您正在使用“bash”任务吗?您可能可以使用 [`task.setvariable`](https://learn.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#set-a- job-scoped-variable-from-a-script) 将变量设置为某个命令的输出,然后设置后续任务的“条件”,以根据该变量的值使管道失败。 (3认同)