在我的 Azure DevOps YAML Pipeline 中,如何将一堆阶段转换为作业矩阵?

Posted

技术标签:

【中文标题】在我的 Azure DevOps YAML Pipeline 中,如何将一堆阶段转换为作业矩阵?【英文标题】:In my Azure DevOps YAML Pipeline, how do I turn a bunch of Stages into a matrix of Jobs? 【发布时间】:2020-02-14 15:41:38 【问题描述】:

我有一组看起来像这样的工作阶段。

- stage: UpdateWoW
  dependsOn: Install
  variables:
  - group: $ parameters.StageVars 
  jobs:
  - template: UpdateApp.yml
    parameters:
      AppName: WoW
      Project: oxygen

- stage: UpdateSCII
  dependsOn: Install
  variables:
  - group: $ parameters.StageVars 
  jobs:
  - template: UpdateApp.yml
    parameters:
      AppName: SCII
      Project: carbon

- stage: UpdateDIII
  dependsOn: Install
  variables:
  - group: $ parameters.StageVars 
  jobs:
  - template: UpdateApp.yml
    parameters:
      AppName: DIII
      Project: xenon

我只是用两个不同的参数调用同一个模板。我想用矩阵来清理它。当涉及模板时,记录的示例并没有给我太多的帮助。我已经尝试了一些变体,但到目前为止,无论我在哪里注入矩阵或包含策略都是“出乎意料的”。

- stage: UpdateApps
  dependsOn: Install
  variables:
  - group: $ parameters.StageVars 
  jobs:
  - template: UpdateApp.yml
    matrix:
      wow:
        AppName: WoW
        Project: oxygen

      sc2:
        AppName: SCII
        Project: carbon

      d3:
        AppName: DIII
        Project: xenon

    parameters:
      AppName: $(AppName)
      Project: $(Project)

调用的模板如下所示:

#UpdateApp.yml
parameters:
  AppName: $(AppName)
  Project: $(Project)

jobs:
- job:
  timeoutInMinutes: 120
  variables:
    Path: D:\games
  steps:
  - template: prep.yml $(Path) 

  - script: dostuff.cmd $(Path) $parameters.AppName $parameters.Project

  - script: domore.cmd $(Path) $parameters.AppName $parameters.Project

【问题讨论】:

【参考方案1】:

想通了。矩阵进入工作级别。舞台是这样的:

- stage: UpdateApps
  dependsOn: Install
  variables:
  - group: $ parameters.StageVars 
  jobs:
  - template: UpdateApp.yml

模板:

#UpdateApp.yml

jobs:
- job:
  timeoutInMinutes: 120
  variables:
    Path: D:\games
  strategy:
    matrix:
      wow:
        AppName: WoW
        Project: oxygen

      sc2:
        AppName: SCII
        Project: carbon

      d3:
        AppName: DIII
        Project: xenon

  steps:
  - template: prep.yml $(Path) 

  - script: dostuff.cmd $(Path) $(AppName) $(Project)

  - script: domore.cmd $(Path) $(AppName) $(Project)

【讨论】:

感谢您在这里分享您的解决方案,您可以 Accept it as an Answer ,这样它可以帮助遇到相同问题的其他社区成员,我们可以归档这个帖子,谢谢。

以上是关于在我的 Azure DevOps YAML Pipeline 中,如何将一堆阶段转换为作业矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

Azure DevOps 中的多个 YAML 构建管道

有没有办法从 Azure DevOps YAML 读取文件?

将数组作为输入传递给 Azure DevOps YAML 任务

Azure Devops Pipeline YAML 中的 Git 标记名称

Azure DevOps、YAML 发布管道? [关闭]

Azure DevOps YAML 管道从传递的变量中删除引号和双反斜杠