Azure Devops - 矩阵策略 - 有条件作业运行

Jem*_*Hah 2 azure azure-devops azure-pipelines azure-pipelines-yaml

*请忽略格式问题

trigger:
 - none
parameters:
- name: stg
displayName: "Environment Names"
type: string
 
pool:
  vmImage: ubuntu-latest
stages:
  - stage: stage1
    displayName: 'Stage C1'
    jobs:
    - job: jobabc
      strategy:
        maxParallel: 2
        matrix: 
            env_1:
                EnvironmentX: E1
                Browser: IE
            env_2:
                EnvironmentX: E2
                Browser: Firefox
            env_3:
                EnvironmentX: E3
                Browser: Chrome
    displayName: 'Job 1'
    condition: contains('${{parameters.stg}}', $(EnvironmentX))}}  
    steps: 
    - task: CmdLine@2
      displayName: 'My Task '
      inputs:
        script: 'echo Stage C1 $(Browser)' 
Run Code Online (Sandbox Code Playgroud)

我将stg参数传递为E1E3E4.

在 Matrix 中我定义了EnvironmentX其值可以是E1, E2, or E3

下面的代码使用定义的矩阵值运行作业 3 次。

我不想运行所有 3 个作业,但 stg 参数值应该决定 JOb 将运行哪个矩阵值。

工作条件不起作用?请问如何解决这个问题

Tho*_*mas 6

您可以有条件地构建矩阵。不理想,但会起作用:

trigger:
 - none
parameters:
- name: stg
  displayName: Environment Names
  type: string

pool:
  vmImage: ubuntu-latest
stages:
- stage: stage1
  displayName: 'Stage C1'
  jobs:
  - job: jobabc
    strategy:
      maxParallel: 2
      matrix:
        ${{ if contains(parameters.stg, 'E1') }}:
          env_1:
            EnvironmentX: E1
            Browser: IE
        ${{ if contains(parameters.stg, 'E2') }}:
          env_2:
            EnvironmentX: E2
            Browser: Firefox
        ${{ if contains(parameters.stg, 'E3') }}:
          env_3:
            EnvironmentX: E3
            Browser: Chrome
    displayName: 'Job 1'
    steps: 
    - task: CmdLine@2
      displayName: 'My Task '
      inputs:
        script: 'echo Stage C1 $(Browser)'

Run Code Online (Sandbox Code Playgroud)