如何确定何时使用REST Api结束Azure DevOps发布管道?

时间:2019-04-16 20:09:59

标签: azure-devops azure-devops-rest-api

我有一个触发构建的脚本。该构建之后是发布管道。在我的脚本中,我可以弄清楚发布的URL是什么,但是我不理解该脚本如何确定发布管道的完成时间。

假设没有交互式批准。还是:

  1. 发布状态似乎停留在“活动”状态,与所有阶段是否都已经收敛到某个最终状态无关。
  2. 阶段可以是“未启动”,“进行中”,“已拒绝”,“已取消”或“成功”。

我想可以通过对所有阶段的状态进行一些分析来弄清楚事情,同时考虑到管道的拓扑结构,但这似乎太复杂了。

是否有可能完全在脚本中等待,直到某个发行版进入最终状态,因此无法进行任何更改?

编辑1

我可以编写一个轮询循环。这是我要弄清楚构建何时结束的工作。但是对于发行版,我遇到了停止条件的问题-我只是不知道它是什么。

编辑2

考虑以下管道:

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

(无人工批准) 现在,假设构建不满足条件(*),因此在A和B(而不是C)上运行后,发行版将有效停止。环境的状态为:

  • A =成功或被拒绝
  • B =成功或被拒绝
  • C = notStarted
  • D = notStarted

那么,在这种情况下将使其停止的等待循环的停止条件是什么?是否可以在不发现发布管道拓扑的情况下做到这一点?

1 个答案:

答案 0 :(得分:0)

不幸的是,没有任何阻塞的API调用。您需要编写一个循环(例如PowerShell)以检查状态的变化。

Release中有两个“状态”字段。

第一个是发行版的整体状态,例如,在将其标记为“已放弃”且不再是用于生产的发行版候选版本之前,已将其部署到两个环境中。您可以通过选择“释放”并选择“放弃”来在UI中设置此状态。

第二个状态是针对正在部署的每个环境。每个ReleaseEnvironment都有一个EnvironmentStatus。令人惊讶的是,那里没有“失败”状态,但是您对不是“未开始”却是“成功”的任何事物都感兴趣。 (也许是部分成功的指示,是某件事发生了失败,而没有将整个环境标记为失败?)。

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