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

Azure devops 有没有办法让Azure DevOps版本只发布构建管道中的实际最新更改?,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我遇到过这样一种情况:两个提交合并到master(例如,第一个和第二个)非常接近(相隔几秒钟)。两者都触发了构建管道:第一个触发了管道,第二个触发了管道(构建并行运行)。无论出于何种原因,commit SECOND的构建管道首先完成,30秒后commit first的构建完成 我的自动发布管道配置为始终从构建管道获取“最新”工件。上面描述的事件序列导致首先部署第二个更改,然后再部署第一个更改(因为它的管道完成了第二个更改),并在前一个版本上进行踩踏,从而有效地将旧位部署到服务中 有没有办法防止这

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

我的自动发布管道配置为始终从构建管道获取“最新”工件。上面描述的事件序列导致首先部署第二个更改,然后再部署第一个更改(因为它的管道完成了第二个更改),并在前一个版本上进行踩踏,从而有效地将旧位部署到服务中

有没有办法防止这种情况?即使一个构建管道由于间歇性的原因而以第二名的成绩完成,我也不希望一个发布版本对一个最近的更改进行重击,而这个更改恰好是在更早的时候完成的

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

谢谢

您可以在触发器中设置为true,这样系统将等待构建完成。在Azure DevOps或YAML的构建管道触发器中,将“在构建过程中批量更改”选项设置为true:

trigger:
  batch: true

若您使用Pull请求,那个么应该并没有问题,因为新的push应该在运行过程中取消。在

中选中autoCancel,您可能需要使管道在同一代理上运行。因此,最新队列将等待前一个队列完成

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

2、向管道中添加需求:#这适用于microsoft托管代理和自托管代理

我测试并发现microsoft托管代理池不支持yaml管道中的自定义功能需求

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

pool:
  name: Default
  demands: Tag -equals Agent1

谢谢你的建议!这确实可行,但不幸的是,我不希望将提交批处理到单个构建中。我更新了我的问题,以澄清保持“一次提交->一次构建”关系的重要性。如果并行运行管道,那么我不认为有一种内置的方法可以实现这一点。默认情况下,如果已设置CI/CD,则任何已完成的生成都将触发发布。因此,将batch设置为true可用于发布真正的最新更改。或者使用单个代理运行,因此所有构建都将在队列中运行。此外,如果您坚持这一点,那么我能想到的唯一方法是您可以尝试编写脚本,检查触发的版本是否为最新版本/提交,如果是最新版本,则延迟一段时间完成。@Auth baby您尝试过Andy的建议吗?有什么好消息吗?