【问题标题】:Trigger Azure pipelines in a specific order按特定顺序触发 Azure 管道
【发布时间】:2021-12-31 12:23:57
【问题描述】:

我的团队负责 10 个微服务,如果有一个单一的管道来触发他们各自的 CI/CD 管道,那将很有用。

我知道可以使用管道触发器,例如

resources:
  pipelines:
  - pipeline: MasterPipeline
    source: DeployAllMicroservices
    trigger: true

我可以将它添加到管道中并创建一个非常简单的DeployAllMicroservices 管道。这可行,但管道将以随机顺序触发。

问题是,需要先推出两个服务,然后才能部署其他 8 个服务。有没有办法先触发管道A & B,其中管道C-J在完成后触发?


我尝试过的其他方法是将管道文件 A.yml、B.yml 作为模板从主管道加载。

steps:
  - template: /CmcBs/Pipelines/A.yml
  - template: /CmcBs/Pipelines/B.yml

但这不适用于成熟的管道(从 trigger、pool、parameters 开始,等等)。

【问题讨论】:

  • 嗨,Casper Dijkstra;我可以问一下您在成熟的管道中使用模板时遇到了什么问题吗?这种方法应该适合你的情况。
  • @VinceBowdren 引用模板时无法解析完整模板。据我所知,它只能包含作业、步骤和任务。
  • 啊,我明白了;您正在尝试将整个管道文件称为模板;不,那行不通。我已经调整了你的问题的措辞以明确这一点。

标签: azure-devops triggers continuous-integration azure-pipelines devops


【解决方案1】:

目前 DevOps 不支持多个流水线同时作为一个流水线的触发流水线。

有一个解决方法可以参考:

  1. 将 pipelineA 设置为 pipelineB 的触发流水线。
  2. 将 pipelineB 设置为其他管道(管道 c-j)的触发管道。

有关触发管道的更多信息,请参阅Trigger one pipeline after another。

【讨论】:

    【解决方案2】:

    另一种方法是使用阶段来执行第一个管道 A、B,然后执行 C 到 J。

    此方法的示例 .yml 如下所示。

    trigger:
    - none
    
    pool:
      vmImage: ubuntu-latest
    
    stages:
    - stage: FirstBatch
      displayName: Build First Batch
      jobs:
      - job: pipelineA
        displayName: Build pipelineA
        steps:
        - script: echo pipelineA
          displayName: pipelineA
    
      - job: pipelineB
        displayName: Build pipelineB
        steps:
        - script: echo pipelineB
          displayName:  pipelineB
    
    
    - stage: SecondBatch
      displayName: Build Second Batch
      jobs:
      - job: pipelineC 
        displayName: Build pipelineC
        steps:
        - checkout: none
        - script: echo Build pipelineC
          displayName: Build pipelineC
    
      - job: pipelineD
        displayName: Build pipelineD
        steps:
        - checkout: none
        - script: echo Build pipelineD
          displayName: Build pipelineD
      
      - job: pipelineE
        displayName: Build pipelineE
        steps:
        - checkout: none
        - script: echo Build pipelineE
          displayName: Build pipelineE
    

    这种方法的缺点是您的微服务只有一个管道,而不是单独的管道。为了进一步解耦此解决方案,您可以使用模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      • 2020-04-13
      • 2020-04-24
      • 2023-01-18
      相关资源
      最近更新 更多