如何在发布期间使用 Azure DevOps Rest API 通过 powershell 获取发布状态(成功、失败)

How to get status of the release (success, failure) with powershell using Azure DevOps Rest API during the release

我正在使用 $releaseUri = "https://vsrm.dev.azure.com/{Org}/{Project}/_apis/Release/deployments?definitionId=$releaseDefinitionId&definitionEnvironmentId=$envId?api-version" 休息 api 来确定发布部署状态。 这里需要注意的是,我将此作为发布本身的一项任务。它总是说发布正在进行中。 我的目标是仅在发布成功时标记构建。想知道在发布完成之前,我如何才能在发布期间获得发布状态。

感谢对此的任何意见!

Its always says the release is in progress.

如果您运行将此API作为发布期间的任务,in progress预期行为。因为对于release pipeline server来说,它包含了很多的行为,除了deployment jobs,还包括approve,gate等。对于server来说,只有所有的行为都结束了,release才是真正的结束。否则将被视为 in progress.

在您的操作中,您将此 API 设置为发布过程的一部分,它永远不会获得真正的部署状态,因为已完成的发布过程尚未完成。

Tag the build only if the release gets succeeded

要实现你想要的,没有直接的方法可以帮助你实现这一点。作为解决方法,您可以创建一个版本级变量来帮助您做到这一点。

场景:有一个发布管道,其中有一个执行部署作业的阶段。我的逻辑工作是在代理作业的最后一步创建一个 发布级变量 和一个新任务,只有在同一代理作业中的先前任务都成功之后。现在,如果 release-level 变量 创建成功,则表示此代理作业 运行 成功。

对于release中创建变量的API,可以使用:

PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.0

以及完成的脚本,可以参考这个blog script


按照这个逻辑,创建一个新的发布级变量意味着它对应的代理作业成功。所以,不管release pipeline中有多少agent job,只需要判断这些变量是否存在,或者值是否设置为你期望的(比如true或false)。如果满足,则执行为构建添加标签的操作。

添加一个将在发布过程结束时执行的代理作业。在这个代理作业中,只需要添加一个用于标记构建的任务。在agent job级别使用condition expression判断任务是否需要执行