GitLab CI/CD 파이프라인 구축 가이드 🚀

이 글은 GitLab CI/CD를 사용하여 기본적인 CI/CD(지속적 통합/지속적 배포) 파이프라인을 구축하는 방법을 단계별로 설명합니다. CI/CD는 소프트웨어 개발 프로세스를 자동화하여 효율성을 높이는 핵심 기술입니다.


 

1. .gitlab-ci.yml 파일 생성

 

GitLab CI/CD는 프로젝트 루트 디렉토리에 있는 .gitlab-ci.yml 파일을 기반으로 작동합니다. 이 파일은 파이프라인의 구성과 실행할 작업을 정의합니다.

  • 프로젝트 생성: GitLab에서 새로운 프로젝트를 생성하거나 기존 프로젝트로 이동합니다.
  • 파일 생성: 프로젝트의 루트 디렉터리에서 .gitlab-ci.yml 파일을 생성합니다.
YAML

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the application..."
    - mkdir build
    - touch build/app.zip
  artifacts:
    paths:
      - build/

test_job:
  stage: test
  script:
    - echo "Running tests..."
    - ls -l build/
    - echo "Tests passed!"

deploy_job:
  stage: deploy
  script:
    - echo "Deploying the application..."
    - ls -l build/
    - echo "Deployment successful!"
  only:
    - main
  • stages: 파이프라인의 단계를 정의합니다. 여기서는 build, test, deploy 세 단계를 정의했습니다.
  • build_job: build 단계에서 실행될 작업입니다.
    • script: 실제 실행될 스크립트 명령어입니다.
    • artifacts: 작업이 성공적으로 완료되면 생성된 파일을 저장소에 저장하는 설정입니다. build/ 디렉터리의 내용이 다음 단계로 전달됩니다.
  • test_job: test 단계에서 실행될 작업입니다. 이전 단계에서 생성된 아티팩트를 자동으로 사용할 수 있습니다.
  • deploy_job: deploy 단계에서 실행될 작업입니다.
    • only: 이 작업은 main 브랜치에 푸시될 때만 실행되도록 설정합니다.

 

2. CI/CD 파이프라인 실행

 

.gitlab-ci.yml 파일을 커밋하고 푸시하면 GitLab이 자동으로 파이프라인을 감지하고 실행합니다.

  • 파일 커밋 및 푸시: IDE나 터미널을 사용하여 git add ., git commit -m "Add CI/CD pipeline", git push origin main 명령어를 실행합니다.
  • 파이프라인 확인: GitLab 프로젝트 페이지에서 왼쪽 메뉴의 **CI/CD -> Pipelines**로 이동합니다.

이제 파이프라인 목록에서 방금 실행된 파이프라인을 볼 수 있습니다. 각 단계(build, test, deploy)가 순서대로 실행되며, 각 단계의 상태(pending, running, passed, failed)를 확인할 수 있습니다.


 

3. 파이프라인 상세 로그 확인

 

각 작업의 진행 상황과 로그를 상세히 확인할 수 있습니다.

  • 작업 로그 확인: Pipelines 페이지에서 특정 파이프라인을 클릭합니다.
  • 각 단계의 작업(예: build_job, test_job)을 클릭하면 해당 작업의 실행 로그를 볼 수 있습니다.

이 로그를 통해 스크립트 실행 결과, 오류 메시지 등을 자세히 파악할 수 있어 디버깅에 매우 유용합니다.


 

4. 고급 설정 (환경 변수, Runner)

 

더 복잡한 파이프라인을 위해 다음 기능을 활용할 수 있습니다.

  • CI/CD 변수: 민감한 정보(비밀번호, API 키 등)는 .gitlab-ci.yml 파일에 직접 노출하지 않고 **Settings -> CI/CD -> Variables**에서 환경 변수로 관리할 수 있습니다.
  • GitLab Runner: 파이프라인 작업을 실제로 실행하는 에이전트입니다. GitLab Runner를 직접 설치하여 온프레미스 환경에서 작업을 실행하거나, GitLab이 제공하는 공유 Runner를 사용할 수 있습니다.

이 가이드를 통해 여러분은 GitLab CI/CD의 기본 개념을 이해하고, 간단한 파이프라인을 구축하여 애플리케이션 빌드, 테스트, 배포를 자동화하는 첫걸음을 내딛을 수 있습니다.
GitLab CI/CD 파이프라인 구축 가이드 🚀

.gitlab-ci.yml 샘플

 

YAML

# 파이프라인의 단계를 정의합니다.
stages:
  - build
  - test
  - deploy

# 빌드 및 테스트 환경을 미리 정의합니다.
# Docker 기반의 Java 17 환경을 사용합니다.
image: eclipse-temurin:17-jdk-focal

variables:
  # Gradle 캐시를 위한 환경 변수
  GRADLE_USER_HOME: $CI_PROJECT_DIR/.gradle

cache:
  # `.gradle` 디렉토리를 캐시하여 빌드 시간을 단축합니다.
  key: "$CI_COMMIT_REF_NAME"
  paths:
    - .gradle/wrapper
    - .gradle/caches

#--------------------------------------------------------------------------------
# 빌드 단계: Gradle을 사용하여 애플리케이션을 빌드합니다.
#--------------------------------------------------------------------------------
build_job:
  stage: build
  script:
    - ./gradlew clean build -x test
  artifacts:
    # 빌드된 JAR 파일을 다음 단계로 전달합니다.
    paths:
      - build/libs/*.jar
    expire_in: 1 week

#--------------------------------------------------------------------------------
# 테스트 단계: 빌드된 애플리케이션의 테스트를 실행합니다.
#--------------------------------------------------------------------------------
test_job:
  stage: test
  script:
    - ./gradlew test

#--------------------------------------------------------------------------------
# 배포 단계: 빌드된 JAR 파일을 Docker 이미지로 만들고, Registry에 푸시합니다.
# 이 예제에서는 Docker를 사용한 배포를 가정합니다.
#--------------------------------------------------------------------------------
deploy_job:
  stage: deploy
  image: docker:latest
  services:
    - docker:dind
  script:
    # Docker 레지스트리에 로그인합니다.
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    # Docker 이미지를 빌드합니다.
    - docker build -t $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA .
    # 이미지를 레지스트리에 푸시합니다.
    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
  only:
    # 이 작업은 'main' 브랜치에 푸시될 때만 실행됩니다.
    - main

 

각 단계별 설명

 

  • stages: build -> test -> deploy 순서로 파이프라인이 실행되도록 단계를 정의합니다.
  • image: 이 파이프라인이 실행될 Docker 이미지를 지정합니다. Gradle 빌드를 위해 Java 17이 포함된 이미지를 사용합니다.
  • cache: Gradle 의존성을 캐시하여 빌드 시간을 단축합니다. .gradle/wrapper.gradle/caches 디렉터리가 캐시됩니다.
  • build_job: build 단계의 작업입니다.
    • ./gradlew clean build -x test 명령어를 사용하여 테스트를 제외하고 애플리케이션을 빌드합니다.
    • **artifacts**를 통해 빌드된 JAR 파일을 다음 단계에서 사용할 수 있도록 저장합니다.
  • test_job: test 단계의 작업입니다.
    • ./gradlew test 명령어를 사용하여 테스트를 실행합니다. 테스트가 실패하면 파이프라인은 중단됩니다.
  • deploy_job: deploy 단계의 작업입니다.
    • Docker 이미지와 서비스를 사용하여 Docker 환경을 구성합니다.
    • docker login: GitLab 프로젝트의 내장된 레지스트리에 로그인합니다.
    • docker build: 빌드된 JAR 파일을 포함하는 Docker 이미지를 빌드합니다.
    • docker push: 빌드된 이미지를 GitLab Registry에 푸시합니다.
    • only: - main: 이 작업은 main 브랜치에 코드가 푸시될 때만 실행됩니다.

이 샘플은 기본적인 설정이며, 프로젝트의 특성에 맞게 수정하여 사용할 수 있습니다. 예를 들어, 테스트 커버리지 보고서 생성, 특정 서버로의 SSH 배포 등 다양한 작업을 추가할 수 있습니다.