如何使用REST API确定Azure DevOps发布流水线何时结束?

3

我有一个脚本触发了一次构建。该构建后面是一个发布流水线。在我的脚本中,我可以找出发布的URL,但我不知道如何让脚本判断何时发布流水线已完成。

假设没有交互式批准。仍然存在以下问题:

  1. 发布状态似乎处于“活动”状态,无论所有阶段是否已收敛到某些最终状态。
  2. 阶段可以是“未启动”,“进行中”,“已拒绝”,“已取消”或“已成功”。

我认为可以通过分析所有阶段的状态并考虑流水线的拓扑结构来弄清楚事情的进展,但这似乎太复杂了。

在脚本中等待某个发布进入最终状态(不可能再更改)是否可能?

EDIT 1

我可以编写轮询循环。这就是我用来确定构建何时结束的方法。但对于发布,我遇到了停止条件的问题 - 我不知道它是什么。

EDIT 2

考虑以下流水线:

       +---> A
      /       \
Start          + -[Promoted only if (*) is true]-> C ---> D
      \       /
       +---> B

(无需手动审批) 现在假设构建不满足条件 (*),因此发布在运行 A 和 B 后就停止了,而不是 C。环境中的状态如下:

  • A = 成功或被拒绝
  • B = 成功或被拒绝
  • C = 未开始
  • D = 未开始

那么,在这种情况下停止等待循环的停止条件是什么?是否可以在不发现发布流程的拓扑结构的情况下完成?

1个回答

0

很遗憾,没有任何阻塞API调用。您需要编写一个循环(例如PowerShell)来检查状态的更改。

发布中有两个“状态”字段。

第一个是发布的总体状态,例如,在将其标记为“废弃”的生产候选版本之前,它已部署到两个环境中。您可以通过选择发布并选择“放弃”在UI中设置此状态。

第二个状态是正在部署的每个环境的状态。每个ReleaseEnvironment都有一个EnvironmentStatus。令人惊讶的是,那里没有“失败”状态,但您对任何不是“未启动”且为“成功”的内容感兴趣。(也许部分成功是指某些内容失败而没有将整个环境标记为失败的指示符?)

如果您启用了部署前或部署后批准,则可能需要考虑第三种状态。这些状态位于preDeployApprovals状态(ApprovalStatus)和postDeployApprovals节点中。


请查看EDIT 2。 - mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接