【问题标题】:How to figure out when Azure DevOps release pipeline is over using REST Api?如何使用 REST Api 确定 Azure DevOps 发布管道何时结束?
【发布时间】:2019-09-07 00:19:14
【问题描述】:

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

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

  1. 发布状态似乎停留在“活动”状态,不管所有阶段是否已经收敛到某个最终状态。
  2. 阶段可以是“notStarted”、“inProgress”、“rejected”、“cancelled”或“succeeded”。

我认为可以通过对所有阶段的状态进行一些分析,同时考虑到管道的拓扑结构来解决问题,但这似乎太复杂了。

是否有可能在脚本中等待,直到某个版本进入最终状态,从该状态无法更改?

编辑 1

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

编辑 2

考虑以下管道:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    第二种状态是针对每个正在部署的环境。每个 ReleaseEnvironment 都有一个EnvironmentStatus。令人惊讶的是,那里没有“失败”状态,但您对任何不是“未启动”且“成功”的事物感兴趣。 (也许 partialSucceeded 是一个指标,表明某事在没有将整个环境标记为失败的情况下失败了?)。

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

    【讨论】:

    • 请参阅编辑 2。
    猜你喜欢
    • 1970-01-01
    • 2021-12-12
    • 2021-06-21
    • 2020-10-04
    • 1970-01-01
    • 2022-01-02
    • 2021-09-23
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多