이 글은 GitLab CI/CD를 사용하여 기본적인 CI/CD(지속적 통합/지속적 배포) 파이프라인을 구축하는 방법을 단계별로 설명합니다. CI/CD는 소프트웨어 개발 프로세스를 자동화하여 효율성을 높이는 핵심 기술입니다.
1. .gitlab-ci.yml 파일 생성
GitLab CI/CD는 프로젝트 루트 디렉토리에 있는 .gitlab-ci.yml 파일을 기반으로 작동합니다. 이 파일은 파이프라인의 구성과 실행할 작업을 정의합니다.
- 프로젝트 생성: GitLab에서 새로운 프로젝트를 생성하거나 기존 프로젝트로 이동합니다.
- 파일 생성: 프로젝트의 루트 디렉터리에서
.gitlab-ci.yml파일을 생성합니다.
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.yml 샘플
# 파이프라인의 단계를 정의합니다.
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 배포 등 다양한 작업을 추가할 수 있습니다.