본문 바로가기
Q&A해결2024년 12월 5일1분 읽기

CI/CD 파이프라인 설계 처음인데 어디서부터

D
DevOps입문
조회 714댓글 4

회사에서 CI/CD를 구축하라는 업무를 받았는데 어디서부터 시작해야 할지 모르겠습니다.

현재 상황:

  • Next.js 앱을 수동으로 서버에 SSH 접속해서 git pull → npm build → pm2 restart로 배포 중
  • GitHub 사용 중
  • 테스트 코드는 아직 없음
  • 개발자 3명

Jenkins, GitHub Actions, GitLab CI 등 옵션이 많은데 뭘 써야 하는지, 파이프라인 단계를 어떻게 구성해야 하는지 가이드 부탁드립니다.

댓글 4

김김영삼1년 전

GitHub 사용 중이시면 GitHub Actions를 추천합니다. 별도 서버 불필요하고, GitHub과 통합이 완벽합니다.


최소한의 파이프라인부터 시작하세요:


# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'

- run: npm ci
- run: npm run build

# 서버에 배포 (SSH)
- uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /app
git pull
npm ci --production
npm run build
pm2 restart all

단계별 확장 계획:



  1. 1단계: main 브랜치 push → 자동 배포 (위 예시)

  2. 2단계: PR 시 빌드 체크 추가

  3. 3단계: 테스트 코드 작성 → 테스트 단계 추가

  4. 4단계: 스테이징 환경 분리


처음부터 완벽한 파이프라인을 만들 필요 없습니다. 수동 배포를 자동화하는 것만으로도 큰 진전이에요!

DDevOps입문(guest)김영삼1년 전
감사합니다! secrets는 어디서 설정하나요? 그리고 배포 중에 서비스가 잠깐 끊기는 건 어쩔 수 없는 건가요?
김김영삼DevOps입문1년 전

Secrets 설정: GitHub 리포 → Settings → Secrets and variables → Actions에서 추가하면 됩니다.


무중단 배포: PM2의 reload 기능을 사용하세요:


# ecosystem.config.js
module.exports = {
apps: [{
name: 'myapp',
script: 'npm',
args: 'start',
instances: 2, // 인스턴스 2개
exec_mode: 'cluster', // 클러스터 모드
}]
}

# 배포 스크립트에서
pm2 reload myapp # restart 대신 reload (무중단)

클러스터 모드 + reload를 사용하면 인스턴스를 하나씩 교체하므로 서비스가 끊기지 않습니다!

DDevOps입문(guest)김영삼1년 전
secrets 설정도 간단하네요! pm2 reload도 바로 적용했습니다. 단계별로 차근차근 확장해보겠습니다. 정말 감사합니다!
Ctrl+Enter로 등록