본문 바로가기

삼분공부/Server

GitLab CI/CD를 이용한 자동 배포 설정 가이드

🔧 GitLab CI/CD란?

GitLab CI/CD는 GitLab에서 제공하는 지속적 통합(CI)지속적 배포(CD) 도구입니다.
코드를 푸시하면 자동으로 테스트, 빌드, 배포까지 실행할 수 있어 배포 자동화를 간편하게 구성할 수 있습니다.


🚀 자동 배포 흐름

  1. 개발자가 GitLab 저장소에 코드 푸시
  2. .gitlab-ci.yml 파일에 정의된 파이프라인 실행
  3. 빌드/테스트 후 서버로 코드 배포
  4. (선택) 성공 알림, 슬랙 메시지 등 후처리

📁 기본 파일 구조

자동 배포를 위해 가장 중요한 파일은 루트에 있는 .gitlab-ci.yml 입니다.
이 파일에 어떤 작업(단계, script 등)을 어떤 조건에서 실행할지 정의합니다.


🧪 예시: Node.js 프로젝트를 EC2에 자동 배포

stages:
  - build
  - deploy

variables:
  APP_NAME: my-node-app
  DEPLOY_PATH: /home/ubuntu/my-node-app

before_script:
  - echo "💡 CI Job 시작..."

build:
  stage: build
  script:
    - echo "✅ 코드 빌드 완료 (필요시 테스트 포함)"
  only:
    - main

deploy:
  stage: deploy
  only:
    - main
  script:
    - echo "🚀 EC2로 배포 시작"
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan -H $EC2_HOST >> ~/.ssh/known_hosts
    - rsync -avz --delete ./ $EC2_USER@$EC2_HOST:$DEPLOY_PATH
    - ssh $EC2_USER@$EC2_HOST "cd $DEPLOY_PATH && npm install && pm2 restart $APP_NAME"

 


🔐 CI/CD 환경변수 설정

GitLab의 "Settings > CI/CD > Variables" 메뉴에서 아래 항목을 등록해야 합니다:

이름설명
SSH_PRIVATE_KEY EC2 접속용 개인키 (PEM 내용 전체)
EC2_HOST EC2 퍼블릭 IP 또는 도메인
EC2_USER 보통 ubuntu, ec2-user 등

💬 배포 알림 추가 (선택)

Slack, 이메일, 카카오톡 등으로 배포 완료 메시지를 보낼 수도 있습니다.
Slack Webhook을 등록해 아래와 같이 추가할 수 있습니다.

after_script:
  - curl -X POST -H 'Content-type: application/json' \
    --data '{"text":"✅ $CI_PROJECT_NAME 배포 완료!"}' \
    $SLACK_WEBHOOK_URL

✅ 실무 팁

  • 브랜치마다 배포 경로를 다르게 설정하고 싶다면 if, rules 문법을 활용하세요.
  • 테스트가 통과했을 때만 배포하도록 설정하면 안전합니다.
  • 서버에 .env 등 민감한 설정은 .gitignore로 제외하고, 서버 측에만 관리하세요.
  • 배포 후 pm2 reload, docker restart, systemctl restart 등 원하는 방식으로 서비스 재시작 가능

📌 마무리

GitLab CI/CD는 복잡한 배포 과정을 자동화해 개발자들의 시간을 절약해줍니다.
한 번만 잘 설정해두면, 안정적이고 일관된 배포를 유지할 수 있으니 꼭 도입해보세요!