Azure Pipelines - 新运行会阻止先前运行中的最终作业,直到队列等于代理池大小

问题描述 投票:0回答:1

在过去的几个月里,我们一直遇到一个问题:如果在设法完成现有排队作业之前开始新的运行,则正在进行的 Azure Pipelines 运行/构建最终会导致单个作业停留在队列优先级 1 。该作业最终会启动并完成,但只有当队列中没有其他作业可供更新的运行时。

  • 被阻止的作业并不一致 - 每次发生时都可能不同。
  • 在特定的 .yaml 管道中最引人注目,该管道包含大约 17 个不同持续时间的作业,可以按任何顺序运行。这将定期针对不同的拉取请求连续排队。
  • 后续运行中的相同作业可以在原始作业开始之前完成。
  • 被阻止的作业仍处于队列优先级 1,但实际上表现得就像它位于队列末尾 - 排队的所有其他作业都是从 2 开始,并且似乎优先。
  • 我们有四个可用于此管道的自托管代理。

运行/队列的一些屏幕截图显示了上次发生的时间。

运行队列: 运行队列

以优先级 1 阻止作业的原始运行: 原创,阻塞运行

较新的运行,没有阻塞的作业,全部运行或从优先级 2 开始: 全新,不阻塞运行

显示优先级的被阻止作业: 优先级 1 被阻止的相关作业

我对这个问题进行了一些特别的搜索,并浏览了最近与管道/工作相关的问题,但没有出现太多。

我已经审查了 .yaml 管道中的作业范围,我们没有使用任何特定的方法来控制作业流 - 它们应该以任何顺序运行。

由于这是一个新问题,而且我的搜索没有出现太多,我想我应该从这里开始,然后再考虑支持计划是否合理。谢谢!

azure-devops azure-pipelines jobs
1个回答
0
投票

根据您的描述,您似乎只设置了几个自托管代理,但没有购买任何自托管并行作业

请注意,如果您的组织只有单个免费自托管并行作业,则无论您有多少个代理,都只会运行一个代理作业,一次只能选取一个自托管代理添加到您的自托管代理池中;因此,同一管道中定义的所有其他

jobs
或来自其他管道的作业将被困在队列中,等待上一个代理作业完成。

如果您要并行运行多个自托管代理作业以减少队列中的待处理时间,您可以一方面根据实际需要购买尽可能多的额外自托管并行作业,另一方面另一方面,利用 Azure Pipelines 的 Microsoft 代理池中的单个免费的 Microsoft 托管并行作业。另请注意,所有 MS 托管或自托管并行作业均由所有项目中共享的所有代理池使用。也就是说,例如,如果单个空闲自托管并行作业被项目 A 中的管道作业之一“占用”,则同一管道或项目 A 中的其他管道中定义的其他代理作业或其他项目都得排队等待。

© www.soinside.com 2019 - 2024. All rights reserved.