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