CI/CD 표현식

CI/CD 표현식 (CI/CD expressions)

CI/CD 표현식은 전용 컨텍스트에서 변수와 입력을 참조해서 파이프라인을 동적으로 구성할 수 있게 해줘요. GitLab은 파이프라인을 만들기 전에 파이프라인 구성에서 이 표현식들을 평가합니다.

출처: 문서

본문

구성 표현식 (Configuration expressions)

구성 표현식은 $[[ ]] 문법을 쓰고 파이프라인 생성 시점(컴파일 타임)에 평가돼요. 이 표현식들로 다양한 컨텍스트에 따라 동적 구성을 할 수 있습니다. 모든 구성 표현식이 공유하는 특징은 이렇습니다.

  • 컴파일 타임 평가: 값은 job 실행 중이 아니라 파이프라인 구성이 만들어질 때 해석됩니다. 표현식이 아주 많으면 파이프라인 생성 시간이 늘어날 수 있지만, job 실행 시간에는 영향을 주지 않아요.
  • 정적 해석: 동적 로직을 수행하거나 런타임 job 상태에 접근할 수 없습니다.

구성 표현식이 값을 접근하기 위해 지원하는 컨텍스트는 이렇게 나뉩니다.

컨텍스트 문법 제공 시점 용도
Inputs 컨텍스트 $[[ inputs.INPUT_NAME ]] GitLab 17.0 재사용 구성에서 CI/CD inputs 참조.
Matrix 컨텍스트 $[[ matrix.IDENTIFIER ]] GitLab 18.6 (Beta) job 의존성에서 parallel:matrix 식별자 참조.
Component 컨텍스트 $[[ component.FIELD_NAME ]] GitLab 18.6 (Beta) 컴포넌트 템플릿에서 컴포넌트 메타데이터 참조.

Inputs 컨텍스트 (Inputs context)

inputs. 컨텍스트는 $[[ inputs.INPUT_NAME ]] 문법으로 재사용 구성의 CI/CD inputs를 참조하는 데 써요. 예를 들면 이렇습니다.

spec:
  inputs:
    environment:
      default: production
    job-stage:
      default: test
---
scan-website:
  stage: $[[ inputs.job-stage ]]
  script: ./scan-website $[[ inputs.environment ]]

inputs. 표현식의 특징은 이렇습니다.

  • 타입 검증: string, number, boolean, array 타입을 검증과 함께 지원해요. 입력 검증은 잘못된 값으로 파이프라인이 만들어지는 걸 막아줍니다.
  • 함수 지원: expand_vars, truncate 같은 사전 정의 함수로 값을 다룰 수 있어요.
  • 범위: 정의된 파일에서 사용할 수 있고, include:inputs로 명시적으로 전달할 수도 있어요.

Matrix 컨텍스트 (Matrix context)

  • GitLab 18.6에서 도입. 이 기능은 beta예요.

matrix. 컨텍스트$[[ matrix.IDENTIFIER ]] 문법으로 parallel:matrix 값을 참조하는 데 써요. job 의존성에서 사용하면 parallel:matrix job 간에 동적인 1:1 매핑을 만들 수 있습니다. 예를 들면 이렇습니다.

.os-arch-matrix:
  parallel:
    matrix:
      - OS: [ubuntu, alpine]
        ARCH: [amd64, arm64]

build:
  script: echo "Testing $OS on $ARCH"
  parallel: !reference [.os-arch-matrix, parallel]

test:
  script: echo "Testing $OS on $ARCH"
  parallel: !reference [.os-arch-matrix, parallel]
  needs:
    - job: build
      parallel:
        matrix:
          - OS: ['$[[ matrix.OS ]]']
            ARCH: ['$[[ matrix.ARCH ]]']

matrix. 표현식의 특징은 이렇습니다.

  • job 수준의 parallel:matrix에 제한: 현재 job의 값만 참조할 수 있어요.
  • 자동 매핑: 스테이지 간 matrix job 사이에 1:1 의존성을 만들어 줍니다.

Component 컨텍스트 (Component context)

  • GitLab 18.6에서 ci_component_context_interpolation이라는 기능 플래그와 함께 beta도입. 기본으로 활성화되어 있어요.
  • GitLab 18.7에서 일반 공개. 기능 플래그 ci_component_context_interpolation은 제거됐어요.

component. 컨텍스트는 $[[ component.FIELD_NAME ]] 문법으로 컴포넌트 템플릿에서 CI/CD component 메타데이터를 참조하는 데 써요. 컴포넌트 컨텍스트는 컴포넌트 자신의 이름, 버전, 커밋 SHA 같은 메타데이터를 제공합니다. 그래서 컴포넌트 템플릿이 자기 메타데이터를 동적으로 참조할 수 있어요.

컴포넌트 컨텍스트를 쓰려면 spec:component 헤더에서 필요한 필드를 선언하고, 컴포넌트 템플릿에서 참조하면 됩니다. 예를 들면 이렇습니다.

spec:
  component: [name, version]
  inputs:
    stage:
      default: build
---

build-job:
  stage: $[[ inputs.stage ]]
  image: registry.example.com/$[[ component.name ]]:$[[ component.version ]]
  script:
    - echo "Building with component version $[[ component.version ]]"

더 알아보기

구성 표현식은 컴파일 타임에 해석되므로 파이프라인 하나를 만들 때 참조하는 변수·입력을 동적으로 조합할 수 있어요. inputs의 타입 검증과 함수를 활용해 재사용 구성을 더 안전하게 만들고, matrix·component 컨텍스트로 job 간 매핑이나 자기 메타데이터 참조까지 확장해 보세요. 관련해서 CI/CD inputs와 components 문서를 함께 보면 큰 그림이 잡힐 거예요.