Azure Devops Pipeline 多个矩阵选项的叉积

Bra*_*rad 2 azure azure-devops azure-pipelines azure-pipelines-yaml

Azure DevOps 管道文档提供了一个用于matrix构建两个不同操作系统和版本组合的示例:

strategy:
  matrix:
    jdk10_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.10"
    jdk11_windows:
      imageName: "windows-latest"
      jdkVersion: "1.11"
Run Code Online (Sandbox Code Playgroud)

这里

问题:有没有办法获得多组矩阵选项的叉积。举例来说,假设我想要这个:

strategy:
  matrix:
    jdk10_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.10"
    jdk11_linux:
      imageName: "ubuntu-latest"
      jdkVersion: "1.11"
    jdk10_windows:
      imageName: "windows-latest"
      jdkVersion: "1.10"
    jdk11_windows:
      imageName: "windows-latest"
      jdkVersion: "1.11"
Run Code Online (Sandbox Code Playgroud)

除了复制并粘贴整个列表之外,是否有更干净/更简单的方法来执行此操作?

从逻辑上讲,我希望能够说更多类似的话:

imageList: ['windows-latest', 'ubuntu-latest']
jdkList: ['1.10', '1.11']
optionList: ['a','b','c']

strategy:
  matrix_combine_lists:
    imageName: imageList
    jdkVersion: jdkList
    someOption: optionList
Run Code Online (Sandbox Code Playgroud)

Tho*_*mas 8

我不确定是否可以使用矩阵,但矩阵只是与一组不同的参数并行运行作业,因此使用每个模板表达式也应该有效:

parameters:
- name: imageList
  type: object
  default: ['windows-latest', 'ubuntu-latest']
- name: jdkList
  type: object
  default: ['1.10', '1.11']
- name: optionList
  type: object
  default: ['a','b','c']

jobs:
- ${{ each image in parameters.imageList }}:
  - ${{ each jdk in parameters.jdkList }}:
    - ${{ each option in parameters.optionList }}:
      - job: ${{ replace(image, '-', '_') }}_${{ replace(jdk, '.', '_') }}_${{ option }}
        pool:
          vmImage: ${{ image }}
        steps:
        - script: |
            echo "Image: ${{ image }}, jdk: ${{ jdk }}, option: ${{ option }}"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述