首页 > 解决方案 > 如何在 Azure DevOps 上一次运行一个版本?

问题描述

我将在我的 azure devops 版本上实施预部署门。我每次都使用 HTTP 请求门检查是否有正在进行的部署。问题是,当一个版本的部署完成(第 1 阶段)时,如果管道中有(第 2 阶段)不进行部署,我想阻止队列中的下一个版本的部署。

最终目标是,无论队列中有多少版本,也无论池中有多少代理,我都想确保只有在部署/其他阶段没有其他活动版本时才开始发布。

标签: azure-devops

解决方案


您可以在Deployments - ListInvoke REST API: GET rest api下面添加一个调用门,并检查部署中是否有任何版本。请参见以下步骤:

https://vsrm.dev.azure.com/{organization}/{project}/_apis/release/deployments?operationStatus=queued,queuedForAgent,phaseInProgress&api-version=6.1-preview.2

1、添加一个Invoke Rest Api Gate

进入 Pre-deployment conditions --> Enable Gate-->Add a Invoke Rest Api Gate--> 点击 Manage 创建服务连接。请参见下面的屏幕截图。

在此处输入图像描述

2,创建如上图所示的服务连接。

当您在上面的屏幕截图中单击管理时。您将转到服务连接页面。单击新服务连接并选择服务连接的通用类型:

在此处输入图像描述

3、回到Invoke Rest Api Gate。选择刚刚创建的服务连接:见下图

  • 方法:Get
  • URL后缀和参数:/_apis/release/deployments?operationStatus=queued,queuedForAgent,phaseInProgress&api-version=6.1-preview.2
  • 成功标准:eq(root['value'][0], '')

在此处输入图像描述

上面的 Invoke rest api 门将调用rest api 以使用过滤器(即。)deployments list过滤这些正在进行或排队部署的发布。如果有任何部署正在进行或排队成功标准:将失败。operationStatusoperationStatus=queued,queuedForAgent,phaseInProgresseq(root['value'][0], '')

如果您使用自托管代理和环境。您可以检查环境和代理池的排他锁


推荐阅读