当另一个管道正在运行时,如何防止启动多级管道

问题描述

我在使用多级管道时遇到问题。假设我有管道 A 和管道 B。

流水线A如下:

  • A.1 阶段
  • A.2 阶段

流水线B如下:

  • B.1 阶段
  • B.2 阶段

这些管道适用于放置在不同存储库中的不同触发器。

有时我们有以下行为:

  • 管道 A 开始阶段 A.1
  • 然后,在流水线 A 开始阶段 A.2 之前,流水线 B 由于其触发而启动并开始阶段 B.1(请注意流水线 A 和 B 完全相互独立)
  • 只有在 B.1 完成后,管道 A 才能在 A.2 上继续

我不抱怨顺序行为,我不想要并行运行。但我想告诉 Azure DevOps 在开始另一个管道之前先完成它。

总而言之,您能告诉 Azure DevOps 在启动另一个管道之前完成多阶段管道吗?我不是在谈论同一管道的另一个实例,而是在谈论一个完全不同的管道。

解决方法

这似乎是排他锁的一个用例。您可以在 Azure 管道中为每个管道创建一个环境(环境 A 和环境 B),然后在这两个环境上应用独占锁定策略。因此,您将相同锁应用于两个环境,而不是两个单独的锁。

更多信息:

https://docs.microsoft.com/en-us/azure/devops/release-notes/2020/pipelines/sprint-172-update#exclusive-deployment-lock-policy

https://docs.microsoft.com/en-us/azure/devops/pipelines/process/approvals?view=azure-devops&tabs=check-pass#exclusive-lock