我如何在 Azure Pipelines 中建立一个阶段取决于前两个阶段中任何一个阶段的成功?

时间:2021-05-27 13:17:49

标签: yaml azure-pipelines

我的管道中有一个阶段需要等待前两个阶段中的任何一个成功结束,这两个阶段是相互排斥的。我可以在 dependsOn 属性中使用多个阶段,但依赖阶段将取决于所有引用阶段的成功结束,而不是其中任何一个阶段。

1 个答案:

答案 0 :(得分:0)

你可以这样尝试:

stages:
- stage: A
  . . .

- stage: B
  . . .

- stage: C
  dependsOn:
  - A
  - B
  condition: or(succeeded('A'), succeeded('B'))

通过这种方式,stage C 只会在 stage Astage B 完成后运行其中任何一个都是succeeded

要查看更多详细信息,您可以查看:

[更新]

对于您的第一个问题:

<块引用>

有了你的解决方案,如果 A 阶段或 B 阶段没有完成,C 阶段会运行吗?

当然。只要阶段 A 和阶段 B 中的一个成功完成,阶段 C 就会运行。

对于你的第二个问题:

<块引用>

如何标记另一个阶段,以便在阶段 C 完成后整个管道看起来已经完成。

您提到 A 阶段和 B 阶段是相互排斥的。因此,如果执行阶段 A,则不应执行阶段 B。反之亦然。因此未执行的阶段应标记为Skipped

参见下面的管道示例:

parameters:
- name: stage
  displayName: 'Select stage A or B'
  type: string
  default: A
  values:
  - A
  - B

stages:
- stage: A
  displayName: 'Stage A'
  condition: eq('${{ parameters.stage }}', 'A')
  . . .

- stage: B
  displayName: 'Stage B'
  condition: eq('${{ parameters.stage }}', 'B')
  . . .

- stage: C
  displayName: 'Stage C'
  dependsOn:
  - A
  - B
  condition: or(succeeded('A'), succeeded('B'))
  . . .
  • 将参数“stage”的值设置为“A”时,条件“{ {1}}' 为真,执行阶段 A。阶段 B 未执行并标记为 eq('${{ parameters.stage }}', 'A')。在阶段 A 成功完成后执行阶段 C。如果阶段 A 和阶段 C 成功完成,则整个流水线运行将被标记为 Skipped

    enter image description here

  • 将参数“succeeded”的值设置为“stage”时,条件“{ {1}}' 为真,阶段 A 未执行并标记为 B。执行阶段 B。在阶段 B 成功完成后执行阶段 C。如果阶段 B 和阶段 C 成功完成,则整个流水线运行将被标记为 eq('${{ parameters.stage }}', 'B')

    enter image description here