Coding Archive

[CI/CD] GitHub Actions + Vercel CI/CD 였λ₯˜ ν•΄κ²°κΈ° λ³Έλ¬Έ

πŸ’» Programming/Development Environment

[CI/CD] GitHub Actions + Vercel CI/CD 였λ₯˜ ν•΄κ²°κΈ°

μ½”λ“±μ–΄ 2025. 9. 29. 16:25

Node.js 버전 문제둜 Vercel 배포 μ‹€νŒ¨?!? 

ν‰μ†Œμ™€ 같이 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ³  메인 λΈŒλžœμΉ˜μ— 컀밋 ν‘Έμ‹œν–ˆλŠ”λ°, 배포가 μ‹€νŒ¨ν–ˆλ‹€λŠ” μ—λŸ¬κ°€..😱
κ°‘μžκΈ° μš”λŸ° μ—λŸ¬κ°€ λœ¨λ©΄μ„œ deployκ°€ μ•ˆλ˜λŠ” 이슈 λ°œμƒ!

 

 

μš”κ²Œ 무슨 λœ»μ΄λƒλ©΄?

  • Node.js 18.xλŠ” 지원 μ’…λ£Œ(EOL) λ˜μ–΄μ„œ 더 이상 Vercelμ—μ„œ λΉŒλ“œν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • ν•΄κ²° 방법은 Node.js 22.x둜 μ—…κ·Έλ ˆμ΄λ“œ ν•˜λŠ” κ²ƒλΏμž…λ‹ˆλ‹€.

원인을 ν™•μΈν•΄λ³΄λ‹ˆ, μ§€κΈˆ ν”„λ‘œμ νŠΈλŠ” Node.js 18 ν™˜κ²½μ—μ„œ λΉŒλ“œλ˜κ³  μžˆμ—ˆκ³ , Vercel 정책상 18 버전은 더 이상 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ λΉŒλ“œκ°€ μ€‘λ‹¨λœ κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

 

 

βœ… μˆ˜μ • 방법 (so simple 주의)

1️⃣ Vercel ν”„λ‘œμ νŠΈ μ„€μ •

  • Vercel λŒ€μ‹œλ³΄λ“œ → Project Settings → Node.js Version: 22.x 둜 λ³€κ²½

πŸ‘‰ μ΄λ ‡κ²Œ ν•˜λ©΄ Vercel μ„œλ²„μ—μ„œ 항상 Node.js 22 ν™˜κ²½μœΌλ‘œ λΉŒλ“œλ©λ‹ˆλ‹€.

2️⃣ GitHub Actions ν™˜κ²½λ„ 맞좰주기

  • ν˜„μž¬ μ›Œν¬ν”Œλ‘œμš°λŠ” Node.js 18 κ³ μ • → Vercelκ³Ό λ™μΌν•˜κ²Œ 22둜 λ³€κ²½
  • actions/setup-nodeλ₯Ό v4둜 μ—…λ°μ΄νŠΈν•˜λ©΄ μ•ˆμ •μ„±↑

3️⃣ package.json에 Node 버전 λͺ…μ‹œ (선택)

{ 
	"engines": { 
    	    "node": "22.x" 
    } 
}

πŸ‘‰ μ΄λ ‡κ²Œ ν•˜λ©΄ νŒ€μ› 둜컬 ν™˜κ²½μ—μ„œλ„ Node.js 22 μ‚¬μš©μ„ ꢌμž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

πŸ“„ κΈ°μ‘΄ CI/CD Workflow 정리

  1. Pull Request / Branch Push → CI μ‹€ν–‰
    • Lint / Test / Build 검증
    • Node.js 22 + Yarn ν™˜κ²½ μ‚¬μš©
  2. Main Branch Push → CD μ‹€ν–‰
    • vercel pull → ν™˜κ²½ λ³€μˆ˜ 뢈러였기
    • vercel build --prod → Actions runnerμ—μ„œ λΉŒλ“œ
    • vercel deploy --prebuilt --prod → λΉŒλ“œ κ²°κ³Όλ¬Ό 배포

 

 

πŸ”§ GitHub Actions μˆ˜μ •(Node.js 22 + Yarn μΊμ‹œ μΆ”κ°€)

ci.yml κΈ°μ‘΄ ver.
...
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
  with:
    node-version: '18'
- run: yarn install --frozen-lockfile
- run: yarn build
...
 

ci.yml μˆ˜μ • ver.

name: CI
on:
  pull_request:
    branches:
      - main
jobs:
  lint:
    name: Lint
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: 'yarn'
      - run: yarn install --frozen-lockfile
      - run: yarn lint

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: 'yarn'
      - run: yarn install --frozen-lockfile
      - run: yarn build
        env:
          NEXT_PUBLIC_BASE_URL: ${{ secrets.NEXT_PUBLIC_BASE_URL }}

  test:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: 'yarn'
      - run: yarn install --frozen-lockfile
      - run: yarn test

 

cd.yml κΈ°μ‘΄ ver.

...
Deploy-Production: 
    runs-on: ubuntu-latest 
    steps: 
      - uses: actions/checkout@v2 
...

 

cd.yml μˆ˜μ • ver.

name: CD(Vercel Production Deployment)

env:
  VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
  VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
on:
  push:
    branches:
      - main
jobs:
  Deploy-Production:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: 'yarn'

      - name: Install Vercel CLI
        run: npm install --global vercel@latest

      - name: Pull Vercel Environment Information
        run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}

      - name: Build Project Artifacts
        run: vercel build --prod --token=${{ secrets.VERCEL_TOKEN }}

      - name: Deploy Project Artifacts to Vercel
        run: vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }}

 

πŸ“Œ λ³€κ²½ 포인트

  • actions/checkout → v4
  • actions/setup-node → v4
  • Node.js 18 → 22
  • cache: 'yarn' μΆ”κ°€ → μ˜μ‘΄μ„± μ„€μΉ˜ 속도 ↑, λΉŒλ“œ 속도 μ΅œμ ν™”

 

 

 

 

πŸ’‘μ΄μŠˆ ν•΄κ²°!

CI/CD μ •μƒμž‘λ™

이번 κ²½ν—˜μ„ 톡해 배운 점은 Vercelμ—μ„œ μ§€μ›λ˜λŠ” Node.js 버전 확인은 ν•„μˆ˜λ‹€!

 

λͺ¨μͺΌλ‘ 별 일 μ•„λ‹ˆμ§€λ§Œ, CI/CD μ΄ˆλ³΄λ‘œμ„œ 처음 κ²ͺ은 이슈라 κ³΅μœ λ“œλ¦¬κ³ μž 글을 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
λ‹€λ₯Έ 뢄듀도 ν˜Ήμ‹œλ‚˜ λΉ„μŠ·ν•œ 상황을 λ§Œλ‚˜μ‹ λ‹€λ©΄ μ°Έκ³ κ°€ 되길 λ°”λžλ‹ˆλ‹€. 😎

Comments