InfoGrab Docs

GitLab CI/CD의 Matrix 표현식

요약

Matrix 표현식은 parallel:matrix 식별자를 기반으로 동적 작업 의존성을 활성화하여 parallel:matrix 작업 간에 1:1 매핑을 생성합니다. Matrix 표현식은 inputs 표현식과 비교하여 몇 가지 제한 사항이 있습니다:

히스토리
  • GitLab 18.6에서 도입되었습니다.

Matrix 표현식은 parallel:matrix 식별자를 기반으로 동적 작업 의존성을 활성화하여 parallel:matrix 작업 간에 1:1 매핑을 생성합니다.

Matrix 표현식은 inputs 표현식과 비교하여 몇 가지 제한 사항이 있습니다:

  • 컴파일 시점만: 식별자는 파이프라인이 생성될 때 확인되며, 작업 실행 중이 아닙니다.
  • 문자열 교체만: 복잡한 로직이나 변환 없음.
  • Matrix 식별자만: CI/CD 변수나 inputs를 참조할 수 없습니다.

구문#

Matrix 표현식은 $[[ matrix.IDENTIFIER ]] 구문을 사용하여 작업 의존성에서 parallel:matrix 식별자를 참조합니다. 예를 들어:

needs:
  - job: build
    parallel:
      matrix:
        - OS: ['$[[ matrix.OS ]]']
          ARCH: ['$[[ matrix.ARCH ]]']

needs:parallel:matrix에서 Matrix 표현식#

Matrix 표현식을 사용하여 작업 의존성에서 Matrix 식별자를 동적으로 참조하고, 모든 조합을 수동으로 지정하지 않고 Matrix 작업 간에 1:1 매핑을 활성화할 수 있습니다.

예를 들어:

linux:build:
  stage: build
  script: echo "Building linux..."
  parallel:
    matrix:
      - PROVIDER: [aws, gcp]
        STACK: [monitoring, app1, app2]

linux:test:
  stage: test
  script: echo "Testing linux..."
  parallel:
    matrix:
      - PROVIDER: [aws, gcp]
        STACK: [monitoring, app1, app2]
  needs:
    - job: linux:build
      parallel:
        matrix:
          - PROVIDER: ['$[[ matrix.PROVIDER ]]']
            STACK: ['$[[ matrix.STACK ]]']

이 예시는 모든 linux:buildlinux:test 작업 간에 1:1 의존성 매핑을 생성합니다:

  • linux:test: [aws, monitoring]linux:build: [aws, monitoring]에 의존합니다.
  • linux:test: [aws, app1]linux:build: [aws, app1]에 의존합니다.
  • 동일한 사항이 모든 6개의 parallel:matrix 값 조합에 적용됩니다.

matrix. 표현식을 사용하면 각 Matrix 조합을 수동으로 지정할 필요가 없습니다.

Matrix 표현식은 현재 작업의 Matrix 구성에서만 식별자를 참조합니다.

YAML 앵커를 사용하여 parallel:matrix 구성 재사용#

YAML 앵커를 사용하여 복잡한 parallel:matrix 구성과 의존성이 있는 여러 작업에서 parallel:matrix 구성을 재사용할 수 있습니다.

예를 들어:

stages:
  - compile
  - test
  - deploy

.build_matrix: &build_matrix
  parallel:
    matrix:
      - OS: ["ubuntu", "alpine"]
        ARCH: ["amd64", "arm64"]
        VARIANT: ["slim", "full"]

compile_binary:
  stage: compile
  script:
    - echo "Compiling for $OS-$ARCH-$VARIANT"
  <<: *build_matrix

integration_test:
  stage: test
  script:
    - echo "Testing $OS-$ARCH-$VARIANT"
  <<: *build_matrix
  needs:
    - job: compile_binary
      parallel:
        matrix:
          - OS: ['$[[ matrix.OS ]]']
            ARCH: ['$[[ matrix.ARCH ]]']
            VARIANT: ['$[[ matrix.VARIANT ]]']

deploy_artifact:
  stage: deploy
  script:
    - echo "Deploying $OS-$ARCH-$VARIANT"
  <<: *build_matrix
  needs:
    - job: integration_test
      parallel:
        matrix:
          - OS: ['$[[ matrix.OS ]]']
            ARCH: ['$[[ matrix.ARCH ]]']
            VARIANT: ['$[[ matrix.VARIANT ]]']

이 구성은 24개의 작업을 생성합니다: 각 스테이지에 8개의 작업(2 OS × 2 ARCH × 2 VARIANT 조합), 스테이지 간에 1:1 의존성이 있습니다.

값의 하위 집합 사용#

Matrix 표현식을 특정 값과 결합하여 의존성의 선택적 하위 집합을 만들 수 있습니다:

stages:
  - prepare
  - build
  - test

.full_matrix: &full_matrix
  parallel:
    matrix:
      - PLATFORM: ["linux", "windows", "macos"]
        VERSION: ["16", "18", "20"]

.platform_only: &platform_only
  parallel:
    matrix:
      - PLATFORM: ["linux", "windows", "macos"]

prepare_env:
  stage: prepare
  script:
    - echo "Preparing $PLATFORM with Node.js $VERSION"
  <<: *full_matrix

build_project:
  stage: build
  script:
    - echo "Building on $PLATFORM"
  needs:
    - job: prepare_env
      parallel:
        matrix:
          - PLATFORM: ['$[[ matrix.PLATFORM ]]']
            VERSION: ["18"]  # Only depend on Node.js 18 preparations
  <<: *platform_only

이 예시에서:

  • prepare_envparallel:matrix를 사용하여 9개의 작업을 생성합니다: 3 PLATFORM × 3 VERSIONS.
  • build_projectparallel:matrix를 사용하여 3개의 작업을 생성합니다: 3 PLATFORM 값만.
  • build_project 작업은 모든 플랫폼(PLATFORM)에 대해 Node.js 18(VERSION)에만 의존합니다.

또는 모든 의존성을 수동으로 구성할 수 있습니다.

관련 주제#

GitLab CI/CD의 Matrix 표현식

Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기
요약

Matrix 표현식은 parallel:matrix 식별자를 기반으로 동적 작업 의존성을 활성화하여 parallel:matrix 작업 간에 1:1 매핑을 생성합니다. Matrix 표현식은 inputs 표현식과 비교하여 몇 가지 제한 사항이 있습니다:

히스토리
  • GitLab 18.6에서 도입되었습니다.

Matrix 표현식은 parallel:matrix 식별자를 기반으로 동적 작업 의존성을 활성화하여 parallel:matrix 작업 간에 1:1 매핑을 생성합니다.

Matrix 표현식은 inputs 표현식과 비교하여 몇 가지 제한 사항이 있습니다:

  • 컴파일 시점만: 식별자는 파이프라인이 생성될 때 확인되며, 작업 실행 중이 아닙니다.
  • 문자열 교체만: 복잡한 로직이나 변환 없음.
  • Matrix 식별자만: CI/CD 변수나 inputs를 참조할 수 없습니다.

구문#

Matrix 표현식은 $[[ matrix.IDENTIFIER ]] 구문을 사용하여 작업 의존성에서 parallel:matrix 식별자를 참조합니다. 예를 들어:

needs:
  - job: build
    parallel:
      matrix:
        - OS: ['$[[ matrix.OS ]]']
          ARCH: ['$[[ matrix.ARCH ]]']

needs:parallel:matrix에서 Matrix 표현식#

Matrix 표현식을 사용하여 작업 의존성에서 Matrix 식별자를 동적으로 참조하고, 모든 조합을 수동으로 지정하지 않고 Matrix 작업 간에 1:1 매핑을 활성화할 수 있습니다.

예를 들어:

linux:build:
  stage: build
  script: echo "Building linux..."
  parallel:
    matrix:
      - PROVIDER: [aws, gcp]
        STACK: [monitoring, app1, app2]

linux:test:
  stage: test
  script: echo "Testing linux..."
  parallel:
    matrix:
      - PROVIDER: [aws, gcp]
        STACK: [monitoring, app1, app2]
  needs:
    - job: linux:build
      parallel:
        matrix:
          - PROVIDER: ['$[[ matrix.PROVIDER ]]']
            STACK: ['$[[ matrix.STACK ]]']

이 예시는 모든 linux:buildlinux:test 작업 간에 1:1 의존성 매핑을 생성합니다:

  • linux:test: [aws, monitoring]linux:build: [aws, monitoring]에 의존합니다.
  • linux:test: [aws, app1]linux:build: [aws, app1]에 의존합니다.
  • 동일한 사항이 모든 6개의 parallel:matrix 값 조합에 적용됩니다.

matrix. 표현식을 사용하면 각 Matrix 조합을 수동으로 지정할 필요가 없습니다.

Matrix 표현식은 현재 작업의 Matrix 구성에서만 식별자를 참조합니다.

YAML 앵커를 사용하여 parallel:matrix 구성 재사용#

YAML 앵커를 사용하여 복잡한 parallel:matrix 구성과 의존성이 있는 여러 작업에서 parallel:matrix 구성을 재사용할 수 있습니다.

예를 들어:

stages:
  - compile
  - test
  - deploy

.build_matrix: &build_matrix
  parallel:
    matrix:
      - OS: ["ubuntu", "alpine"]
        ARCH: ["amd64", "arm64"]
        VARIANT: ["slim", "full"]

compile_binary:
  stage: compile
  script:
    - echo "Compiling for $OS-$ARCH-$VARIANT"
  <<: *build_matrix

integration_test:
  stage: test
  script:
    - echo "Testing $OS-$ARCH-$VARIANT"
  <<: *build_matrix
  needs:
    - job: compile_binary
      parallel:
        matrix:
          - OS: ['$[[ matrix.OS ]]']
            ARCH: ['$[[ matrix.ARCH ]]']
            VARIANT: ['$[[ matrix.VARIANT ]]']

deploy_artifact:
  stage: deploy
  script:
    - echo "Deploying $OS-$ARCH-$VARIANT"
  <<: *build_matrix
  needs:
    - job: integration_test
      parallel:
        matrix:
          - OS: ['$[[ matrix.OS ]]']
            ARCH: ['$[[ matrix.ARCH ]]']
            VARIANT: ['$[[ matrix.VARIANT ]]']

이 구성은 24개의 작업을 생성합니다: 각 스테이지에 8개의 작업(2 OS × 2 ARCH × 2 VARIANT 조합), 스테이지 간에 1:1 의존성이 있습니다.

값의 하위 집합 사용#

Matrix 표현식을 특정 값과 결합하여 의존성의 선택적 하위 집합을 만들 수 있습니다:

stages:
  - prepare
  - build
  - test

.full_matrix: &full_matrix
  parallel:
    matrix:
      - PLATFORM: ["linux", "windows", "macos"]
        VERSION: ["16", "18", "20"]

.platform_only: &platform_only
  parallel:
    matrix:
      - PLATFORM: ["linux", "windows", "macos"]

prepare_env:
  stage: prepare
  script:
    - echo "Preparing $PLATFORM with Node.js $VERSION"
  <<: *full_matrix

build_project:
  stage: build
  script:
    - echo "Building on $PLATFORM"
  needs:
    - job: prepare_env
      parallel:
        matrix:
          - PLATFORM: ['$[[ matrix.PLATFORM ]]']
            VERSION: ["18"]  # Only depend on Node.js 18 preparations
  <<: *platform_only

이 예시에서:

  • prepare_envparallel:matrix를 사용하여 9개의 작업을 생성합니다: 3 PLATFORM × 3 VERSIONS.
  • build_projectparallel:matrix를 사용하여 3개의 작업을 생성합니다: 3 PLATFORM 값만.
  • build_project 작업은 모든 플랫폼(PLATFORM)에 대해 Node.js 18(VERSION)에만 의존합니다.

또는 모든 의존성을 수동으로 구성할 수 있습니다.

관련 주제#