有没有办法使Azure DevOps版本仅发布构建管道中的实际最新更改?

时间:2019-10-07 20:59:50

标签: azure-devops

我遇到这样一种情况,两个提交非常接近(相隔几秒钟)合并到母版(例如FIRST和SECOND)。两者都触发了构建管道:FIRST首先触发了管道,SECOND首先触发了管道(构建并行运行)。无论出于何种原因,提交SECOND的构建管道首先完成,然后30秒钟,提交FIRST的构建完成。

我的自动发布管道已配置为始终从构建管道中获取“最新”工件。上述事件序列导致首先部署了SECOND更改,然后部署了FIRST更改(由于其管道完成了第二次更改),并踩在了先前的版本上,有效地将旧位部署到了该服务。

有什么办法可以防止这种情况发生?即使构建管道由于间歇性原因而排在第二位,我也不希望发布会因为刚刚完成的最近更改而sto脚。

编辑:感谢那些建议/支持批处理构建的想法的人,但这不是我要启用的选项。我仍然希望每个提交都触发其自己的构建(以简化构建中断原因的分配)。我只是在寻找按提交顺序触发的版本,而不是构建完成的顺序。

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以在触发器中将batch设置为true,因此系统将等待直到构建完成。在Azure DevOps或YAML中,将“构建正在进行时的批处理更改”选项设置为true:

trigger:
  batch: true

如果使用Pull请求,则应该没有问题,因为新的Push应该会取消正在进行的运行。在PR triggers

中检查自动取消

答案 1 :(得分:1)

您可能需要使管道在同一代理上运行。这样最新的队列将等待上一个队列完成。

您可以按照以下步骤将管道限制为一个代理。 1,向要运行管道的代理添加自定义功能(项目设置-> 代理池(选择代理池)-> 代理(选择代理)-> 功能enter image description here

2,向您的管道添加需求:#这适用于Microsoft托管的代理和自托管的代理

enter image description here

我进行了测试,发现Microsoft托管的代理程序池不支持yaml管道中对自定义功能的需求。

以下yaml管道仅适用于自托管代理池。

pool:
  name: Default
  demands: Tag -equals Agent1