继续执行Azure Pipelines中的错误(但仍会报告为错误)

我有一个由YAML文件定义的Azure Pipelines管道,该文件可以编译,运行一些测试,然后发布测试结果。显然,不进行编译就不可能运行测试,因此编译任务显然设置了continueonError: false。但是,我仍然想在测试失败时发布测试结果,因此我在测试任务下将continueonError设置为true

这似乎很有效,直到我的一项测试失败。然后,Azure只是报告了警告,而不是使构建失败。我如何才能使它在整个构建过程中仍然出错,又执行其余任务?

hessler2009 回答:继续执行Azure Pipelines中的错误(但仍会报告为错误)

我认为消除对几个 YAML 属性的确切作用的误解很有用(因为这也让我感到困惑)。该问题询问了现有答案未涵盖的 YAML 管道,所以我想我也可以举一个例子。

  • continueOnError 确定 当前 任务是在遇到错误(带有警告)时继续,还是立即失败。尽管该名称可能具有误导性,但它并不能(直接)确定是否继续执行后续任务。
  • condition 决定任务是否运行。默认情况下,如果前一个任务失败,那么这个任务将不会运行。您可以覆盖它并让任务运行,而不管之前的失败如何。

因此,如果您的测试失败,则没有必要使用 continueOnError,只是为了运行 Publish Test Results 任务,您无论如何都可以让它运行。

我不确切知道您的管道是如何构建的,但希望这可以展示一个示例:

trigger:
  - main

pool:
  vmImage: ubuntu-latest

steps:
- script: 'echo "compiling....."; exit 0'
  displayName: 'Compile'

- script: 'echo "testing....." ; exit 1'    # exit 1" simulates task failure 
  displayName: 'Run Tests'
  condition: succeeded()

- script: 'echo "publishing test results....."'
  displayName: 'Publish Results'
  condition: succeededOrFailed()            # Run task even if previous ones fail

结果是整体流水线失败:

Overall pipeline failure

我们可以看到测试结果仍然发布在管道分解中(尽管前面的步骤失败了,这里不需要 continueOnError):

Detailed pipeline breakdown

您可以使用 YAML 示例中的退出代码来确定哪些任务失败。我发现有关 condition 字段中确切内容的文档有点糟糕,但我特别建议您参考 ConditionsExpressionsExpressions#Job status check functions

,

您可以如下设置发布测试结果任务的控制选项。 enter image description here

然后您将获得结果。 enter image description here

如果编译任务始终成功运行,则可以使用默认条件。如果没有,我认为您可以使用自定义条件。例如,在编译任务之后添加一个任务以创建一个变量,然后将该变量的值用作发布测试结果的条件,例如and(succeeded(),eq(variables['variableName'],'variableValue'))

您可以指定任务或作业的运行条件。更详细的信息,您可以参考here

本文链接:https://www.f2er.com/3120101.html

大家都在问