【问题标题】:Accounting for build order / interdependencies between CI pipelines考虑 CI 管道之间的构建顺序/相互依赖关系
【发布时间】:2022-10-25 16:54:32
【问题描述】:

假设我有两个库AB,其中B 依赖于AAB 都设置为使用各自的管道进行持续集成。 A 的更改将导致“A”管道运行并部署新版本,B 也是如此。

现在假设我编写了一个合并请求,其中包含对 A 的更改B,其中B 中的更改取决于A 中的新更改。因此,A必须B 之前构建,否则B 的构建将失败。

我的问题是,据我所知,我们使用的 CI 平台(Azure DevOps)没有任何指定构建顺序的机制。您可以让一个管道触发另一个管道(例如,运行A 可能会触发B 的运行),但这并不妨碍BAB 都发生更改时可能首先运行( Azure 文档:Combining trigger types),导致频繁浪费运行,注定会失败。

简单的答案可能是为这两个库设置一个管道,并在其中任何一个发生更改时构建它们。然而,这并不理想,而且问题更大,因为我们实际上有超过 2 个库。我们的应用程序有几十个,我们不想构建和部署几十个带有新版本号的库,每次只有其中一个发生变化。

所以我的问题是两个部分:

A) 从“正确”的 CI 实践的角度来看,我们的方法是否存在根本性的错误?我认为这将是一个足够常见的场景,Azure DevOps 可以处理它,所以它不会让我认为我们的方法存在根本性的错误,我们需要调整。

B) 如果这一种有效的 CI 方法,为什么 Azure DevOps 不具备处理它的能力,或者在 Azure 中是否有一些我忽略的好方法来完成这个?

【问题讨论】:

    标签: azure continuous-integration azure-pipelines cicd


    【解决方案1】:

    您可以根据条件从管道 YAML 调用不同的模板。 供您参考:Parameters to select a template at runtime

    parameters:
    - name: optionTemplate
      displayName: optional run pipeline'
      type: string
      default: runFirst
    
    - ${{ if eq(parameters.experimentalTemplate, runFirst) }}:
      - template: First.yml
    - ${{ if not(eq(parameters.experimentalTemplate, runSecond)) }}:
      - template: Second.yml
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-06
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      相关资源
      最近更新 更多