GitHub Actions로 CI/CD 자동화하기

2025. 1. 7. 10:19·Git
반응형

소개

GitHub Actions을 사용하여 CI/CD 파이프라인을 구축하는 방법을 처음부터 차근차근 알아보겠습니다. 실제 프로젝트에서 바로 사용할 수 있는 예제도 함께 살펴보겠습니다.

GitHub Actions란?

GitHub Actions는 빌드, 테스트, 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼입니다. git push 등의 이벤트가 발생했을 때 자동으로 정의된 작업을 실행할 수 있습니다.

기본 워크플로우 생성

1. 워크플로우 파일 위치

프로젝트 루트에 다음 경로로 yml 파일을 생성합니다:

your-project/
  ├── .github/
  │   └── workflows/
  │       └── main.yml

2. 기본 워크플로우 구조

name: CI/CD Pipeline

# 워크플로우 실행 조건
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

# 실행할 작업들
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

실전 예제: React 프로젝트 배포

1. React 빌드 및 테스트

name: React Deploy

on:
  push:
    branches: [ main ]

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

    steps:
      - uses: actions/checkout@v3

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '18'
          cache: 'npm'  # npm 캐시 사용

      - name: Install dependencies
        run: npm ci  # clean install

      - name: Run tests
        run: npm test

      - name: Build project
        run: npm run build

      # 빌드 결과물 저장
      - name: Upload build artifacts
        uses: actions/upload-artifact@v3
        with:
          name: build-files
          path: build/

2. AWS S3 배포

name: Deploy to AWS

jobs:
  deploy:
    needs: build-and-test  # 이전 작업 완료 후 실행
    runs-on: ubuntu-latest

    steps:
      # 빌드 결과물 다운로드
      - name: Download build artifacts
        uses: actions/download-artifact@v3
        with:
          name: build-files
          path: build

      # AWS 인증 설정
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
          aws-region: ap-northeast-2

      # S3에 업로드
      - name: Upload to S3
        run: |
          aws s3 sync build/ s3://${{ secrets.AWS_S3_BUCKET }} --delete

환경별 배포 설정 (개발/스테이징/운영)

name: Multi-environment Deploy

on:
  push:
    branches:
      - develop
      - staging
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest

    # 환경별 설정
    environment:
      ${{ github.ref == 'refs/heads/main' && 'production' ||
          github.ref == 'refs/heads/staging' && 'staging' ||
          'development' }}

    steps:
      - uses: actions/checkout@v3

      - name: Set environment variables
        run: |
          if [[ $GITHUB_REF == 'refs/heads/main' ]]; then
            echo "ENV=production" >> $GITHUB_ENV
          elif [[ $GITHUB_REF == 'refs/heads/staging' ]]; then
            echo "ENV=staging" >> $GITHUB_ENV
          else
            echo "ENV=development" >> $GITHUB_ENV
          fi

      - name: Deploy to environment
        run: |
          echo "Deploying to ${{ env.ENV }} environment"
          # 실제 배포 스크립트

캐시 활용하기

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      # npm 캐시
      - name: Cache node modules
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-node-

      # 빌드 캐시
      - name: Cache build output
        uses: actions/cache@v3
        with:
          path: |
            build
            node_modules/.cache
          key: ${{ runner.os }}-build-${{ github.sha }}

보안 설정

1. 시크릿 설정

GitHub 레포지토리의 Settings > Secrets and variables > Actions에서 시크릿을 설정할 수 있습니다.

steps:
  - name: Deploy with secrets
    env:
      API_KEY: ${{ secrets.API_KEY }}
      DATABASE_URL: ${{ secrets.DATABASE_URL }}
    run: |
      echo "Using secrets for deployment"

2. 환경 보호 규칙

jobs:
  deploy:
    environment:
      name: production
      url: https://www.example.com

    # 필요한 승인자 설정
    needs: [build, test]
    if: github.event_name == 'push' && github.ref == 'refs/heads/main'

실행 결과 알림

1. Slack 알림

steps:
  - name: Notify Slack
    uses: 8398a7/action-slack@v3
    with:
      status: ${{ job.status }}
      fields: repo,message,commit,author,action,eventName,ref,workflow,job,took
    env:
      SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
    if: always()  # 성공/실패 모두 알림

작업 매트릭스 활용

여러 버전이나 환경에서 테스트할 때 유용합니다.

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [14.x, 16.x, 18.x]

    steps:
      - uses: actions/checkout@v3
      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-node@v3
        with:
          node-version: ${{ matrix.node-version }}

마치며

GitHub Actions를 활용하면 개발부터 배포까지의 과정을 자동화할 수 있습니다. 초기 설정에 시간이 들 수 있지만, 한번 설정해두면 개발 생산성을 크게 향상시킬 수 있습니다.

저작자표시 비영리 변경금지 (새창열림)

'Git' 카테고리의 다른 글

Cherry-Pick : 특정 커밋 선택적으로 적용하기  (0) 2024.05.30
Git 특정 크기 이상 파일 제외하고 추가하기  (0) 2024.05.27
git log로 코드의 변경사항을 확인하는 방법  (0) 2023.11.03
Git lfs : 대용량 파일 관리  (0) 2023.10.11
Git : rebase, merge, 그리고 stash  (0) 2023.09.09
'Git' 카테고리의 다른 글
  • Cherry-Pick : 특정 커밋 선택적으로 적용하기
  • Git 특정 크기 이상 파일 제외하고 추가하기
  • git log로 코드의 변경사항을 확인하는 방법
  • Git lfs : 대용량 파일 관리
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (727) N
      • 스마트팜 (1) N
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (18) N
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    ipcamera
    C#
    쇼핑몰리뷰
    Python
    rtsp
    list
    리뷰관리
    리스트
    카페24리뷰이관
    상품 리뷰 크롤링
    cv2
    programming101
    programmerlife
    스마트스토어리뷰
    appdevelopment
    codingcommunity
    codingtips
    믈레코비타멸균우유
    learntocode
    스크립트 실행
    유니티
    스크립트 실행 순서
    긴유통기한우유
    unity
    devlife
    라떼우유
    셀레니움
    리뷰이관
    파이썬
    카페24리뷰
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
GitHub Actions로 CI/CD 자동화하기
상단으로

티스토리툴바