.gitlab-ci.yml 기본 구조
YAML
# .gitlab-ci.yml
stages:
- test
- build
- deploy
variables:
NODE_VERSION: "20"
IMAGE_NAME: $CI_REGISTRY_IMAGE
# 잡 정의
lint:
stage: test
image: node:20-alpine
script:
- npm ci
- npm run lint
test:
stage: test
image: node:20-alpine
script:
- npm ci
- npm test
coverage: '/Liness*:s*(d+.d+)%/'
artifacts:
reports:
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml스테이지와 잡 흐름
YAML
stages:
- test # 병렬 실행
- build # test 완료 후
- staging # build 완료 후
- production # 수동 승인 후
build-image:
stage: build
image: docker:24
services:
- docker:24-dind
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $IMAGE_NAME:$CI_COMMIT_SHORT_SHA .
- docker push $IMAGE_NAME:$CI_COMMIT_SHORT_SHA
only:
- main
- develop환경별 배포
YAML
deploy-staging:
stage: staging
environment:
name: staging
url: https://staging.example.com
script:
- kubectl set image deployment/myapp myapp=$IMAGE_NAME:$CI_COMMIT_SHORT_SHA
only:
- develop
deploy-production:
stage: production
environment:
name: production
url: https://example.com
script:
- kubectl set image deployment/myapp myapp=$IMAGE_NAME:$CI_COMMIT_TAG
when: manual # 수동 승인 필요
only:
- tags캐시와 아티팩트
YAML
# 캐시 — 잡 간 재사용 (node_modules 등)
cache:
key: $CI_COMMIT_REF_SLUG
paths:
- node_modules/
- .npm/
# 아티팩트 — 잡 간 파일 전달 + 다운로드 가능
build:
script:
- npm run build
artifacts:
paths:
- dist/
expire_in: 1 week # 보관 기간
# 아티팩트 사용
deploy:
dependencies:
- build
script:
- ls dist/ # build 잡의 아티팩트 사용 가능조건 실행 — rules
YAML
test:
script: npm test
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
- if: '$CI_COMMIT_BRANCH == "main"'
- if: '$CI_COMMIT_TAG'
when: never # 태그에서는 실행 안 함
# 파일 변경 시에만 실행
backend-test:
script: npm test
rules:
- changes:
- src/**/*
- package.jsonGitLab Runner 등록
Bash
# Runner 설치 (Ubuntu)
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo apt install -y gitlab-runner
# GitLab 프로젝트 → Settings → CI/CD → Runners에서 토큰 확인
sudo gitlab-runner register --url https://gitlab.com --registration-token YOUR_TOKEN --executor docker --docker-image alpine:latest --description "my-runner"
# 상태 확인
sudo gitlab-runner status
sudo gitlab-runner list내장 환경변수 주요 목록
| 변수 | 값 |
|---|---|
$CI_COMMIT_SHA | 전체 커밋 해시 |
$CI_COMMIT_SHORT_SHA | 짧은 커밋 해시 |
$CI_COMMIT_BRANCH | 브랜치 이름 |
$CI_COMMIT_TAG | 태그 이름 |
$CI_REGISTRY_IMAGE | 프로젝트 컨테이너 레지스트리 |
$CI_ENVIRONMENT_NAME | 배포 환경 이름 |
$CI_PIPELINE_SOURCE | 트리거 소스 (push, schedule 등) |
편집 안내 · Editorial Note
이 가이드는 AI 도구를 활용해 초안을 구성하고 사람이 명령어·문맥을 검토해 발행했습니다. 운영체제와 도구 버전에 따라 결과가 달라질 수 있으므로 적용 전 공식 문서를 함께 확인하세요. 오류를 발견하시면 이메일로 제보해 주세요.
관련 공식 문서Git 공식 문서 ↗
질문 & 답변 (Q&A)
이 가이드에 대해 궁금한 점을 질문해보세요. 확인 후 답변드립니다.