🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

GitLab CI 완벽 가이드 - 슬라이드 1/13
A

AI Generated

2025. 10. 30. · 30 Views

GitLab CI 완벽 가이드

GitLab CI/CD를 활용한 자동화된 파이프라인 구축 방법을 소개합니다. 고급 기능인 캐싱, 아티팩트 관리, 병렬 실행, 환경별 배포 전략까지 실무에 바로 적용 가능한 패턴을 다룹니다.


카테고리:TypeScript
언어:TypeScript
메인 태그:#GitLab
서브 태그:
#CI/CD#Pipeline#Docker#Automation

들어가며

이 글에서는 GitLab CI 완벽 가이드에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.

목차

  1. 기본_파이프라인_구성
  2. Docker_이미지_활용
  3. 캐시_최적화_전략
  4. 아티팩트_관리
  5. 병렬_실행_최적화
  6. 조건부_실행_규칙
  7. 환경별_배포_전략
  8. 시크릿_변수_관리
  9. 재사용_가능한_템플릿
  10. 다운스트림_파이프라인
  11. 실패_처리_및_재시도
  12. 성능_모니터링_통합

1. 기본 파이프라인 구성

개요

.gitlab-ci.yml 파일을 통해 빌드, 테스트, 배포 단계를 정의하는 기본 파이프라인 구조입니다.

코드 예제

stages:
  - build
  - test
  - deploy

build-job:
  stage: build
  script:
    - npm install
    - npm run build

설명

stages에서 실행 순서를 정의하고, 각 job에서 stage를 지정하여 순차적으로 실행됩니다. build-job은 build 단계에서 의존성 설치와 빌드를 수행합니다.


2. Docker 이미지 활용

개요

Docker 이미지를 사용하여 일관된 빌드 환경을 구성하고, 서비스 컨테이너를 연결합니다.

코드 예제

test-job:
  image: node:18-alpine
  services:
    - postgres:14
  variables:
    POSTGRES_DB: testdb
  script:
    - npm test

설명

node:18-alpine 이미지로 Node.js 환경을 제공하고, services로 PostgreSQL 컨테이너를 연결하여 통합 테스트를 실행합니다.


3. 캐시 최적화 전략

개요

의존성 파일을 캐싱하여 파이프라인 실행 속도를 크게 향상시키는 방법입니다.

코드 예제

cache:
  key: ${CI_COMMIT_REF_SLUG}
  paths:
    - node_modules/
    - .npm/
  policy: pull-push

build-job:
  script:
    - npm ci --cache .npm

설명

브랜치별로 node_modules와 npm 캐시를 저장하여 재사용하며, npm ci 명령으로 빠르고 안정적인 설치를 수행합니다.


4. 아티팩트 관리

개요

빌드 결과물을 아티팩트로 저장하고 다음 단계에서 재사용하여 효율성을 높입니다.

코드 예제

build-job:
  script:
    - npm run build
  artifacts:
    paths:
      - dist/
    expire_in: 1 week

deploy-job:
  dependencies:
    - build-job

설명

dist/ 디렉토리를 아티팩트로 저장하고 1주일 동안 보관합니다. deploy-job은 dependencies로 build-job의 아티팩트를 자동으로 받아 사용합니다.


5. 병렬 실행 최적화

개요

테스트를 여러 작업으로 분할하여 병렬 실행함으로써 전체 파이프라인 시간을 단축합니다.

코드 예제

test-job:
  parallel: 4
  script:
    - npm run test -- --shard=${CI_NODE_INDEX}/${CI_NODE_TOTAL}

lint-job:
  parallel:
    matrix:
      - LINT_TARGET: [js, css, html]
  script:
    - npm run lint:${LINT_TARGET}

설명

parallel로 4개의 테스트 샤드를 동시 실행하고, matrix를 사용해 여러 린트 작업을 병렬로 처리합니다.


6. 조건부 실행 규칙

개요

rules를 활용하여 특정 조건에서만 job을 실행하도록 제어합니다.

코드 예제

deploy-prod:
  stage: deploy
  rules:
    - if: $CI_COMMIT_BRANCH == "main"
      when: manual
    - when: never
  script:
    - npm run deploy:prod

설명

main 브랜치에서만 실행되며 수동 승인이 필요합니다. 조건에 맞지 않으면 절대 실행되지 않습니다.


7. 환경별 배포 전략

개요

environment를 정의하여 staging과 production 환경을 분리하고 배포 이력을 추적합니다.

코드 예제

deploy-staging:
  stage: deploy
  environment:
    name: staging
    url: https://staging.example.com
    on_stop: stop-staging
  script:
    - kubectl apply -f k8s/staging/

설명

staging 환경으로 배포하며 환경 URL과 중지 작업을 연결합니다. GitLab UI에서 배포 상태와 이력을 시각적으로 확인할 수 있습니다.


8. 시크릿 변수 관리

개요

CI/CD 변수를 사용하여 API 키와 같은 민감한 정보를 안전하게 관리합니다.

코드 예제

deploy-job:
  script:
    - echo "Deploying with key"
    - |
      curl -X POST https://api.example.com/deploy \
        -H "Authorization: Bearer $DEPLOY_TOKEN" \
        -d '{"version":"'$CI_COMMIT_SHA'"}'

설명

GitLab 설정에서 보호된 변수 $DEPLOY_TOKEN을 등록하고, 스크립트에서 안전하게 참조하여 API 호출에 사용합니다.


9. 재사용 가능한 템플릿

개요

extends와 YAML 앵커를 활용하여 중복을 제거하고 유지보수성을 높입니다.

코드 예제

.deploy-template: &deploy
  script:
    - npm run deploy
  only:
    - main

deploy-aws:
  <<: *deploy
  variables:
    DEPLOY_TARGET: aws

deploy-gcp:
  <<: *deploy
  variables:
    DEPLOY_TARGET: gcp

설명

공통 배포 설정을 템플릿으로 정의하고, 각 job에서 상속받아 변수만 변경하여 재사용합니다.


10. 다운스트림 파이프라인

개요

trigger를 사용하여 다른 프로젝트의 파이프라인을 연쇄적으로 실행합니다.

코드 예제

trigger-microservice:
  stage: deploy
  trigger:
    project: team/microservice-api
    branch: main
    strategy: depend
  variables:
    PARENT_PIPELINE_ID: $CI_PIPELINE_ID

설명

현재 파이프라인에서 다른 프로젝트의 파이프라인을 트리거하고, strategy: depend로 완료를 대기합니다. 마이크로서비스 아키텍처에서 유용합니다.


11. 실패 처리 및 재시도

개요

retry와 allow_failure를 사용하여 일시적 오류를 처리하고 파이프라인 안정성을 높입니다.

코드 예제

integration-test:
  script:
    - npm run test:integration
  retry:
    max: 2
    when:
      - runner_system_failure
      - stuck_or_timeout_failure
  allow_failure:
    exit_codes: 137

설명

시스템 오류 시 최대 2번 재시도하며, 특정 종료 코드(메모리 부족)는 실패로 처리하지 않아 파이프라인 전체가 중단되지 않습니다.


12. 성능 모니터링 통합

개요

파이프라인 성능 메트릭을 수집하고 GitLab에서 시각화합니다.

코드 예제

test-job:
  script:
    - npm test -- --coverage
  coverage: '/Lines\s*:\s*(\d+\.\d+)%/'
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura.xml

설명

정규식으로 커버리지 비율을 추출하고, cobertura 형식의 리포트를 아티팩트로 저장하여 GitLab UI에서 커버리지 추세를 확인할 수 있습니다.


마치며

이번 글에서는 GitLab CI 완벽 가이드에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.

관련 태그

#GitLab #CI/CD #Pipeline #Docker #Automation

#GitLab#CI/CD#Pipeline#Docker#Automation#TypeScript

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

함께 보면 좋은 카드 뉴스

마이크로서비스 배포 완벽 가이드

Kubernetes를 활용한 마이크로서비스 배포의 핵심 개념부터 실전 운영까지, 초급 개발자도 쉽게 따라할 수 있는 완벽 가이드입니다. 실무에서 바로 적용 가능한 배포 전략과 노하우를 담았습니다.

EFK 스택 로깅 완벽 가이드

마이크로서비스 환경에서 로그를 효과적으로 수집하고 분석하는 EFK 스택(Elasticsearch, Fluentd, Kibana)의 핵심 개념과 실전 활용법을 초급 개발자도 쉽게 이해할 수 있도록 정리한 가이드입니다.

Spring Boot 상품 서비스 구축 완벽 가이드

실무 RESTful API 설계부터 테스트, 배포까지 Spring Boot로 상품 서비스를 만드는 전 과정을 다룹니다. JPA 엔티티 설계, OpenAPI 문서화, Docker Compose 배포 전략을 초급 개발자도 쉽게 따라할 수 있도록 스토리텔링으로 풀어냅니다.

Docker로 컨테이너화 완벽 가이드

Spring Boot 애플리케이션을 Docker로 컨테이너화하는 방법을 초급 개발자도 쉽게 이해할 수 있도록 실무 중심으로 설명합니다. Dockerfile 작성부터 멀티스테이지 빌드, 이미지 최적화, Spring Boot의 Buildpacks까지 다룹니다.

컨테이너 앱 CI/CD 구축 완벽 가이드

AWS ECS와 CodePipeline을 활용하여 컨테이너 기반 애플리케이션의 자동 배포 파이프라인을 구축하는 방법을 알아봅니다. 블루/그린 배포 전략과 모니터링 설정까지 단계별로 설명합니다.