Ian*_*Ian 4 continuous-integration unit-testing azure azure-pipelines
我有一个由 YAML 文件定义的 Azure Pipelines 管道,该文件编译、运行一些测试,然后发布测试结果。不编译就运行测试显然是不可能的,所以编译任务显然是有continueOnError: false设定的。但是,我还是想在测试失败时发布测试结果,所以我设置continueOnError为true下测试任务。
这似乎有效,直到我的一项测试失败。然后,Azure 并没有使构建失败,而是报告了一个警告。我怎样才能让它仍然错误整个构建但同时执行剩余的任务?
我认为消除对几个 YAML 属性的确切作用的误解很有用(因为这也让我感到困惑)。该问题询问了现有答案未涵盖的 YAML 管道,所以我想我也可以举一个例子。
continueOnError确定当前任务在遇到错误(带有警告)时是否继续,或者是否立即失败。尽管该名称可能具有误导性,但它不会(直接)确定是否继续执行后续任务。condition决定任务是否运行。默认情况下,如果前一个任务失败,那么这个任务将不会运行。您可以覆盖它并让任务运行,而不管早期的故障如何。因此,continueOnError如果您的测试失败,则没有必要使用它,只是为了运行发布测试结果任务,您无论如何都可以运行它。
我不知道你的管道是如何构建的,但希望这能展示一个例子:
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
结果是整个管道都失败了:
我们可以看到测试结果仍然发布在管道分解中(尽管前面的步骤失败了,这里不需要continueOnError):
您可以使用 YAML 示例中的退出代码来确定哪些任务失败。我发现有关该condition领域的确切内容的文档有点差,但具体而言,我会向您推荐Condition、Expressions和Expressions#Job status check functions。
| 归档时间: | 
 | 
| 查看次数: | 2527 次 | 
| 最近记录: |