【问题标题】:AzureDevops agent must finish current build before taking an other oneAzure Devops 代理必须先完成当前构建,然后再进行另一个构建
【发布时间】:2020-10-22 01:20:17
【问题描述】:

情况

我正在使用只有一个代理的 AzureDevops Server 2020。

我有 2 个构建管道:

  • 构建管道 (yaml)
  • 合并管道 (yaml)

每个管道包含多个阶段,其中仅包含一个作业(因为阶段的每个任务都必须在同一个代理上运行)。

当前行为

如果我同时运行两个管道,代理会以“假”并行运行这两个管道,这会使两个构建过程非常缓慢。

代理流程订单示例: build-stage1、build-stage2、merge-stage1、merge-stage2、merge-stage3、merge-stage4、build-stage3...

想要的行为

如果我们有比构建执行更多的代理,这并不意外。但这绝不会是我的情况。

所以我更愿意锁定代理以用于当前构建(如 Jenkins 中的内置)。

代理示例想要的流程订单build-stage1、build-stage2、build-stage3、build-stage4、build-stage5(最新)、merge-stage1、merge-stage2、merge-stage3、merge-stage4、merge-stage5(最新) em>

是否可以设置代理工作归属政策

【问题讨论】:

  • 两个管道是否都在同一次推送中触发?
  • 所以这是同时触发两个管道的预期结果,因为作业是单独安排的,下一个阶段的作业要等到前一个阶段完成后才会安排。如果您希望合并管道在构建管道之后运行,如果构建管道成功,您是否可以让构建管道触发合并管道?
  • 嗨@Gilsdav。这张票有更新吗?如果答案能给你一些帮助,请随时告诉我。只是提醒this
  • 你好@Dom,这是两个完全独立的管道。

标签: parallel-processing azure-devops


【解决方案1】:

发生这种情况是因为如果某个作业依赖于某些东西(并且默认情况下它依赖于前一个阶段),它不会被添加到代理队列中。

使用dependsOn: [] 让 Azure Devops 知道它不依赖任何东西,因此每个作业都被添加到队列中并按 FIFO 顺序执行。

【讨论】:

    【解决方案2】:

    同意Dom。

    根据我的测试,我可以重现这种行为。但是恐怕没有办法锁定代理完成流水线再拿下一个。

    解决方法:

    您可以使用Pipeline trigger 来触发合并管道。

    构建管道:

        pool:
          name: Default
          
        stages:
        - stage: Build_Stage1
          displayName: Stage1
     ....
        
        - stage: Build_Stage2
          displayName: Stage2
          dependsOn: Build_Stage1
       ....
        
        - stage: Build_Stage3
          displayName: Stage3
          dependsOn: Build_Stage2
       ....
    

    合并管道:

    resources:
      pipelines:
      - pipeline: TestTrigger  
        source: ABC
        trigger:
         branches:
          - '*'
    
    pool:
      name: Default
    
    stages:
    - stage: Merge_Stage1
      displayName: Merge1
    ...
    
    - stage: Merge_Stage2
      displayName: Merge2
      dependsOn: Merge_Stage1
      ...
    
    - stage: Merge_Stage3
      displayName: Merge3
      dependsOn: Merge_Stage2
      ...
    

    在这种情况下,您可以单独排队构建管道。然后在 Build Pipeline 完成后会触发 Merge Pipeline。

    流程:build-stage1, build-stage2, build-stage3, build-stage4, build-stage5(latest), -> Tiggeer -> merge-stage1, merge-stage2, merge-stage3, merge-stage4, merge-stage5(latest)

    另一方面,这个要求很有价值。

    要获得此功能,您可以在our UserVoice site 上添加对该功能的请求,这是我们产品建议的主要论坛。感谢您帮助我们构建更好的 Azure DevOps。

    【讨论】:

    • 谢谢,但我的管道是完全独立的。构建管道是手动启动的。合并管道由 PR 触发(我可以同时打开 50 多个 PR)。如果我不能通过 FIFO 对它们进行优先级排序,您可以想象每个 PR(以及第一个 PR)所花费的时间。
    • 为什么我检查这个答案是好的:它澄清了这个选项不存在。但我可以使用dependsOn: []“修复”这个问题,因为它会将每个作业添加到队列中并使用 FIFO 来执行它们。
    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多