CI/CD 파이프라인 기반 자동 PR·자동 배포 워크플로우
Source: Dev.to
GitHub Actions를 이용한 실제 프로덕션 수준의 Auto PR + Auto Deploy 워크플로우입니다. 팀에서 메인 브랜치를 안정적으로 유지하고 배포를 자동화하기 위해 흔히 사용하는 설정이죠.
우리는 이를 3개의 파트로 나누어 구축합니다:
🤖 자동 Pull Request 생성 (feature → main)
🧪 PR에 대한 CI 검사 실행
🚀 main에 병합될 때 자동 배포
🤖 1. 자동 Pull Request 생성 워크플로우
특성 브랜치를 푸시하면 자동으로 PR을 생성합니다.
📁 .github/workflows/auto-pr.yml
name: Auto Create Pull Request
on:
push:
branches-ignore:
- main
jobs:
create-pr:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Create Pull Request
uses: repo-sync/pull-request@v2
with:
destination_branch: main
github_token: ${{ secrets.GITHUB_TOKEN }}
pr_title: "Auto PR: ${{ github.ref_name }}"
pr_body: |
## 🤖 Auto-generated PR
Branch: `${{ github.ref_name }}`
Please review changes before merging.
Push to feature/login
GitHub Actions triggers
Automatically opens PR → feature/login → main
🧪 2. CI 파이프라인 (PR에서 실행)
깨끗한 코드만 병합되도록 보장합니다.
.github/workflows/ci.yml
on:
jobs:
steps:
- uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm install
- name: Run lint
run: npm run lint
- name: Run tests
run: npm test
🧠 이 워크플로우가 하는 일
병합 전:
- Lint 검사 실행
- 테스트 실행
- 품질이 낮은 코드가 병합되는 것을 차단
🚀 3. main에 병합될 때 자동 배포
PR이 병합되면 애플리케이션을 배포합니다.
📁 .github/workflows/deploy.yml
예시: React + Node 배포 (Vercel + Render)
name: Auto Deploy
on:
push:
branches: [ main ]
jobs:
deploy-frontend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install frontend
working-directory: client
run: npm install
- name: Build frontend
working-directory: client
run: npm run build
- name: Deploy to Vercel
run: npx vercel --prod --token=${{ secrets.VERCEL_TOKEN }}
deploy-backend:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install backend
working-directory: server
run: npm install
- name: Deploy backend (Render webhook)
run: curl -X POST ${{ secrets.RENDER_DEPLOY_HOOK }}
다음으로 이동:
👉 Repo → Settings → Secrets → Actions
추가:
https://api.render.com/deploy/xxx
🧭 5. 전체 워크플로우 시연
개발자 흐름
git checkout -b feature-login
git push origin feature-login
🤖 Pull Request 생성
🧪 CI 검사 실행
👀 리뷰 대기 (선택)
🔀 main에 병합
🚀 프론트엔드 + 백엔드 자동 배포
GitHub 설정:
- 리뷰어 1~2명 요구
- 병합 전 CI 통과 요구
- Settings → Branches → main
- PR 없이 병합 금지 활성화
- 상태 체크 요구
- 직접 푸시 차단
name: Notify Slack
run: |
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"New deployment to production 🚀"}' \
${{ secrets.SLACK_WEBHOOK }}
🟣 버전 태깅 추가
⚠️ 흔히 하는 실수
❌ 테스트 없이 자동 배포
→ 프로덕션이 깨짐
❌ 브랜치 보호 설정 없음
→ 누구든 main에 푸시 가능
❌ 비밀 키 누락
→ 배포가 조용히 실패
🧠 최종 아키텍처 (프로 수준)
Feature Branch
↓
Auto PR Created
↓
CI (tests + lint)
↓
Review + Approval
↓
Merge to main
↓
CD Pipeline
↓
Frontend deploy (Vercel)
Backend deploy (Render/AWS)
↓
Slack/Discord notification