<aside> <img src="/icons/bookmark_purple.svg" alt="/icons/bookmark_purple.svg" width="40px" />

목차

</aside>

어떻게 FE CI/CD 파이프 라인을 구성할 것인가?

파이프라인 구성

초기 설계(오브젝트 스토리지 업로드)

image.png

개선안 도입 (서버 인스턴스 직접 배포)

name: Release Frontend Build

on:
  push:
    branches:
      - release

jobs:
  build-and-upload:
    runs-on: ubuntu-latest

    steps:
      # 1. 리포지토리 클론
      - name: Checkout code
        uses: actions/checkout@v4

      # 2. Node.js 환경 설정
      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 20

      # 3. 의존성 설치
      - name: Install dependencies
        working-directory: ./frontend
        run: npm ci

      # 4. 빌드
      - name: Build and Obfuscate
        working-directory: ./frontend
        run: npm run build # 빌드 실행

      # 5. 빌드된 파일을 인스턴스 서버로 전송
      - name: Deploy to EC2
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.SSH_HOST }} # 서버의 호스트 IP
          username: ${{ secrets.SSH_USERNAME }} # SSH 사용자명
          key: ${{ secrets.SSH_KEY }} # SSH 비공개 키
          source: "frontend/dist/*" # 빌드된 파일이 있는 디렉토리
          target: "/tmp/build" # 원격 서버로 파일을 복사할 디렉토리
          strip_components: 2 # 상위 디렉토리 레벨을 제거

      # 6. 백업 및 기존파일 삭제, 복사
      - name: Configure EC2
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SSH_HOST }} # 서버의 호스트 IP
          username: ${{ secrets.SSH_USERNAME }} # SSH 사용자명
          key: ${{ secrets.SSH_KEY }} # SSH 비공개 키
          script: |
            # 기존 파일 백업 (롤백을 위해)
            sudo tar -czf /var/www/backup/$(date +%Y%m%d_%H%M%S).tar.gz -C /var/www/html .

            # 새 빌드 파일 복사
            # sudo rm -rf /var/www/html/*
            sudo cp -r /tmp/build/* /var/www/html/

            # 권한 설정
            sudo chown -R www-data:www-data /var/www/html

            # Nginx 설정 확인 및 리로드(기존 연결을 끊지 않고 새로운 설정 적용)
            sudo nginx -t && sudo systemctl reload nginx