在Azure Pipeline YAML中,即使前一阶段的作业失败,如何使用成功('JobName')使阶段运行

tho*_*sen 4 azure-devops azure-pipelines azure-pipelines-yaml

我试图让我的第二阶段运行,即使第一阶段的两个作业之一失败,但我无法使用作业状态检查功能让它按预期工作succeeded('JobName')

在下面的 YAML 管道中,我希望只要Job1成功,即使Job2失败,它也会运行Stage2,但事实并非如此:

stages:
  - stage: Stage1
    jobs:
      - job: Job1
        steps:
          - pwsh: echo "Job1"
      - job: Job2
        steps:
          - pwsh: write-error "Job2 error"

  - stage: Stage2
    condition: succeeded('Job1')
    jobs:
      - job: Job3
        steps:
          - pwsh: echo "Job3"
Run Code Online (Sandbox Code Playgroud)

即使Job2失败,只要 Job1 成功,如何让Stage2运行?

使用always()将使Stage2始终运行,但我希望它取决于Job1的成功状态,而不管Job2状态如何。

相关文档:

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/stages?view=azure-devops&tabs=yaml#conditions

https://learn.microsoft.com/en-us/azure/devops/pipelines/process/expressions?view=azure-devops#job-status-functions

Krz*_*tof 8

看起来这不可能在下一阶段的阶段级别处理作业结果。但是您可以使用此解决方法:

trigger: none

pool:
  vmImage: ubuntu-latest

stages:
  - stage: Stage1
    jobs:
      - job: Job1
        steps:
          - pwsh: echo "Job1"
      - job: Job2
        steps:
          - pwsh: write-error "Job2 error"

  - stage: Stage2
    dependsOn: Stage1
    condition: always()
    jobs:
      - job: Job3
        condition: in(stageDependencies.Stage1.Job1.result, 'Succeeded')
        steps:
          - pwsh: echo "Job3"
      - job: Job4
        condition: in(stageDependencies.Stage1.result, 'Succeeded')
        steps:
          - pwsh: echo "Job4"

Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以在此处找到相关文档。