Github Action

1. GitHub Actions를 활용한 CI/CD 파이프라인 구성 가이드

1.1 CI/CD란?

구분설명수행 목적
CI (Continuous Integration)코드 변경 시 자동 빌드 및 테스트 수행코드 품질 보장
CD (Continuous Deployment / Delivery)변경된 코드 자동 배포 (Staging or Production)자동화된 배포

1.2 GitHub Actions란?

  • GitHub에서 제공하는 자동화 워크플로우 엔진
  • 이벤트 기반으로 작업을 자동 실행함

  • 주요 개념
항목설명
Workflow자동화 작업 단위 (YAML 파일로 정의)
Job여러 Step으로 이루어진 실행 단위
Step실제 명령 실행 단위 (쉘 명령 또는 액션 사용)
Action재사용 가능한 작업 모듈
Runner실제 실행 환경 (Ubuntu, macOS, Windows 등)

1.3 폴더 구조

.github/
└── workflows/
    └── ci-cd.yml     <-- 워크플로우 정의 파일

1.4 기본 예제: Node.js 프로젝트 CI/CD 파이프라인

  • ci-cd.yml 전체 예제
name: CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

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

    steps:
      - name: 소스 체크아웃
        uses: actions/checkout@v3

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

      - name: 의존성 설치
        run: npm install

      - name: 테스트 실행
        run: npm test

  deploy:
    needs: build-and-test
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main' && github.event_name == 'push'

    steps:
      - name: 소스 체크아웃
        uses: actions/checkout@v3

      - name: 배포 스크립트 실행
        run: |
          echo "🚀 배포 중..."
          ./deploy.sh  # 배포 스크립트 실행
  • 주요 구성 요소 상세 설명

    • on: (트리거)

      • 어떤 이벤트가 발생할 때 워크플로우가 실행될지 정의함

          on:
          push:
              branches: [ main ]
          pull_request:
              branches: [ main ]
        
      • main 브랜치에 push 또는 PR 생성 시 실행됨

    • Job: build-and-test

      • Job은 Ubuntu 환경에서 실행됨

          jobs:
          build-and-test:
              runs-on: ubuntu-latest
        
      • Step 설명

          - uses: actions/checkout@v3
        
        • 현재 커밋된 코드를 워크플로우에 가져옴

            - uses: actions/setup-node@v3
            with:
                node-version: '18'
          
        • Node.js 18 환경을 설정함

            - run: npm install
          
        • 의존성 설치

            - run: npm test
          
        • 테스트 실행

      • Job: deploy

        • 앞선 Job이 성공해야 실행됨 (needs: 사용)
        • main 브랜치에서 push 이벤트일 때만 실행

            if: github.ref == 'refs/heads/main' && github.event_name == 'push'
          
        • ./deploy.sh 파일을 실행하여 배포 자동화

1.5 실제 배포 예시 (예: Vercel, Firebase, S3 등)

  • 예: Vercel CLI로 배포하기

      - name: Vercel CLI 설치
      run: npm i -g vercel
    
      - name: Vercel 배포
      run: vercel --token=$ --prod
    

🔐 VERCEL_TOKEN은 GitHub Repository의 Settings > Secrets에서 등록함

1.6 Secrets 설정 방법

  1. GitHub 저장소 > Settings > Secrets > Actions
  2. New repository secret 클릭
  3. 예: VERCEL_TOKEN, AWS_ACCESS_KEY_ID, DEPLOY_KEY 등 추가

1.7 테스트 예제 프로젝트용 Workflow

  • 예: Python 프로젝트용 CI

      name: Python CI
    
      on: [push]
    
      jobs:
      test:
          runs-on: ubuntu-latest
    
          steps:
          - uses: actions/checkout@v3
    
          - name: Python 설치
              uses: actions/setup-python@v4
              with:
              python-version: '3.10'
    
          - name: 의존성 설치
              run: pip install -r requirements.txt
    
          - name: 테스트 실행
              run: pytest
    

1.8 배포 자동화 고도화 아이디어

항목설명
Preview 배포PR마다 서브 도메인에 배포하여 미리보기
Slack 알림배포 완료/실패 시 팀 채널에 알림
Test Coverage 리포트CI 과정 중 테스트 커버리지 확인
Linting & Formattingeslint, black 등을 CI에서 자동 실행

1.9 워크플로우 모니터링 방법

  • GitHub > Actions 탭에서 각 워크플로우 확인
  • 실패 시 로그를 확인하고 재실행 가능
  • 각 Step의 실행 시간, 결과 상태도 추적 가능

마무리 요약

항목설명
GitHub ActionsGitHub 내에서 제공하는 자동화 도구
CI/CD테스트 및 배포를 자동으로 수행
Workflow.github/workflows/*.yml 파일로 작성
Job & Step실행 작업을 구체적으로 분리 가능
Secrets민감한 정보는 암호화된 환경 변수로 관리

추가 자료