Writing

Matrix generators in GitLab and GitHub CI/CD

Run jobs across multiple parameter combinations in parallel — better resource utilization and faster pipelines without duplicating config.

Matrix generators

A matrix generator lets you define a set of parameters and automatically run jobs across every combination of those parameters in parallel. This achieves better resource utilization and faster job execution in CI pipelines — without duplicating job definitions.

GitHub Actions example

name: Matrix Generator Example

on:
  push:
    branches:
      - main

jobs:
  build:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macOS-latest]
        node_version: [12, 14, 16]

    runs-on: ${{ matrix.os }}

    steps:
      - name: Checkout code
        uses: actions/checkout@v2

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node_version }}

      - name: Install dependencies
        run: npm install

      - name: Build and test
        run: npm run build && npm test

The matrix is defined under strategy. It generates every combination of os and node_version — 3 OS × 3 versions = 9 parallel jobs.

GitLab example

stages:
  - build

demo:
  stage: build
  parallel:
    matrix:
      - names: ["test1", "test2"]
  script:
    - echo "hello ${names}"

GitLab’s parallel: matrix generates one job per parameter value. In this case, it creates demo:[test1] and demo:[test2] as separate parallel jobs, each with the correct variable injected.

Use cases

Matrix generators are especially useful for eliminating repetitive job definitions. For example, if you have four jobs deploying to four different clusters, a matrix generator lets you define the logic once and parameterize the cluster name — reducing your pipeline config significantly.