我正在使用$releaseUri = "https://vsrm.dev.azure.com/{Org}/{Project}/_apis/Release/deployments?definitionId=$releaseDefinitionId&definitionEnvironmentId=$envId?api-version"
rest api来确定发布部署状态。
需要注意的是,我在发行版本身中将其作为任务来完成。它总是说发布正在进行中。
我的目标是仅在发布成功后才标记构建。想知道我如何才能在发行完成之前获得发行期间的发行状态。
对此表示感谢!
答案 0 :(得分:1)
它总是说发布正在进行中。
如果在发行过程中将此API作为任务运行,则in progress
是期望行为。因为对于发布管道服务器,它除了包含部署作业之外还包含许多行为,它还包括批准,登门等。对于服务器而言,只有在所有行为结束之后,发布才是真正的终结。否则它将被视为in progress
。
在操作中,您将此API设置为发布过程的一部分,因为完成的发布过程尚未完成,它永远不会获得真正的部署状态。
仅在发布成功后才标记构建
要实现您想要的目标,没有直接的方法可以帮助您实现目标。解决方法是,您可以创建一个发布级变量来帮助您完成此任务。
方案:有一个发布管道,该管道具有执行部署作业的阶段。我围绕逻辑所做的工作是,仅在同一代理作业中的先前任务全部成功之后,才在代理作业的最后一步创建一个具有新任务的发布级变量。现在,如果成功创建了 release-level变量,则表示该代理作业已成功运行。
对于发布中的API创建变量,您可以使用:
PUT https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/releases/{releaseId}?api-version=5.0
还有完成的脚本,您可以参考此blog script。
使用此逻辑,创建的一个新的发行级变量意味着其相应的代理作业成功。因此,无论发布管道中存在多少个代理作业,都只需确定这些变量是否存在,或者是否将值设置为您期望的值(例如true或false)即可。如果满足,则执行将标签添加到构建的操作。
添加一个将在发布过程结束时执行的代理作业。在此代理工作中,只需添加一个用于标记构建的任务即可。在代理程序作业级别使用condition expression来确定是否需要执行任务。