Job Matrix#

This guide shows how to set up a job matrix: dynamically-created parallel jobs with different environment variables.

To configure a job matrix, you need to set the matrix property in a job definition. matrix takes a list of env_var and its possible values.

The job matrix will expand to the total possible combinations of variables and create a job for each one.

Testing against multiple language versions#

In the following example, a job matrix is used to run different Java versions:

blocks:
  - name: "Java versions"
    task:
      jobs:
      - name: Java versions
        matrix:
          - env_var: JAVA_VERSION
            values: [ "8", "11" ]
        commands:
          - sem-version java $JAVA_VERSION
          - java -version

sem-version switches the active Java version. $JAVA_VERSION takes the values 8 and 11:

sem-version java 8
java -version
sem-version java 11
java -version

Multiple environment variables#

The following job matrix has 2 variables, each with 3 possible values:

blocks:
  - name: "Job matrix"
    task:
      jobs:
      - name: Matrix
        matrix:
          - env_var: FOO
            values: [ "A", "B", "C" ]
          - env_var: BAR
            values: [ "1", "2", "3" ]
        commands:
          - echo FOO=$FOO BAR=$BAR

The matrix has 3 * 3 = 9 possible combinations. As a result, 9 parallel jobs are executed:

  • FOO=A BAR=1
  • FOO=A BAR=2
  • FOO=A BAR=3
  • FOO=B BAR=1
  • FOO=B BAR=2
  • FOO=B BAR=3
  • FOO=C BAR=1
  • FOO=C BAR=2
  • FOO=C BAR=3