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

In Azure Pipeline YAML, how to make stage run even though a job in previous stage fails, using succeeded('JobName')

我正在尝试进行第二阶段 运行 尽管第一阶段的两个作业中有一个失败了,但我无法使用作业状态检查功能使其按预期工作 succeeded('JobName').

在下面的 YAML 管道中,我希望它 运行 Stage2 即使 Job2 失败,只要Job1 成功,但没有:

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"

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

使用 always() 将始终使 Stage2 运行,但我希望它取决于 Job1[= 的成功状态39=],无论 Job2 状态如何。

相关文档:

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

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

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

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"

您有这方面的文档 here