【问题标题】:Is there a way to make an Azure DevOps release only publish the actual latest change from a build pipeline?有没有办法让 Azure DevOps 版本只发布来自构建管道的实际最新更改?
【发布时间】:2019-10-07 20:59:50
【问题描述】:

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

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

有什么办法可以防止这种情况发生吗?即使构建管道由于间歇性原因而第二次完成,我也不希望发布版本会阻碍发生较早完成的最近更改。

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

谢谢!

【问题讨论】:

  • @AuthInfant 如果您正在并行运行管道,那么我不认为有一种内置的方法可以实现这一点。默认情况下,如果您设置了 CI/CD,则任何完成的构建都会触发发布。因此,将批处理设置为 true 以发布真正的最新更改。或者使用单个代理运行,因此所有构建都将在队列中运行。另外,如果您坚持这一点,那么我能想到的唯一方法是您可以尝试编写脚本来检查触发的版本是否是最新版本/提交,如果是最新版本则延迟一段时间完成.
  • @Auth Infant 你试过安迪的建议了吗?有什么好消息吗?

标签: azure-devops azure-pipelines


【解决方案1】:

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

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

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

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

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

pool:
  name: Default
  demands: Tag -equals Agent1

【讨论】:

    【解决方案2】:

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

    trigger:
      batch: true
    

    如果您使用拉取请求,应该没有问题,因为新的推送应该取消正在进行的运行。检查PR triggers中的自动取消

    【讨论】:

    • 感谢您的建议!这确实可行,但不幸的是,我不希望将提交批量提交到单个构建中。我更新了我的问题,以澄清保持一次提交->一次构建关系很重要。
    猜你喜欢
    • 1970-01-01
    • 2022-08-23
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    相关资源
    最近更新 更多