根据输入参数的所有可能组合生成作业矩阵

时间:2019-11-27 18:01:10

标签: azure-pipelines

我想使用matrix strategy在Azure Pipelines中生成作业,但不想通过显式列出所有可能的组合来生成作业。 而不是:

matrix:
  core211:
    module: core
    scala: 2.11
  python211:
    module: python
    scala: 2.11
  libraries211:
    module: ibraries
    scala: 2.11
  core212:
    module: core
    scala: 2.12
  python212:
    module: python
    scala: 2.12
  libraries212:
    module: libraries
    scala: 2.12

我想做

matrix:
  combinations:
    module: ["libraries", "python", "core"]
    scala: ["2.11", "2.12"]

生成上述矩阵。 使用Azure Pipelines可以做到这一点吗?

我从Travis CI获得了这种方法。

2 个答案:

答案 0 :(得分:1)

  

Azure Pipelines是否可行?

恐怕答案是否定的。目前,这不是受支持的方案。

关于yaml中的Matrix模式,请检查this document

strategy:
  matrix: { string1: { string2: string3 } }
  maxParallel: number

它等于:

    matrix:
      string1:
        string2: string3
        .
        .
        .
      string1:
        string2: string3
        .
        .
        .

根据文档: 对于矩阵中的每个string1,将生成作业的副本。字符串1是副本的名称,并将添加到作业名称之后。

因此,如果我们要生成6个作业,那么现在我们必须列出6个“ string1”。 (这意味着我们确实需要明确列出所有可能的组合...)

此外:

除了否定答案,我认为您想要的是一个好主意!因此,我在here中发布了功能请求DC forum。任何对此感兴趣的人都可以为其投票并进行跟踪。希望以上所有对您有所帮助:)

答案 1 :(得分:0)

是的,有可能。通过creating a JSON at runtime使用bash / script / powershell / pwsh

并将其用于矩阵策略:

jobs:
- job: generator
  steps:
  - bash: echo "##vso[task.setVariable variable=legs;isOutput=true]{'a':{'myvar':'A'}, 'b':{'myvar':'B'}}"
    name: mtrx
  # This expands to the matrix
  #   a:
  #     myvar: A
  #   b:
  #     myvar: B
- job: runner
  dependsOn: generator
  strategy:
    matrix: $[ dependencies.generator.outputs['mtrx.legs'] ]
  steps:
  - script: echo $(myvar) # echos A or B depending on which leg is running