본문 바로가기
IT & Tech 정보

🚀 GitHub Actions로 CI/CD 파이프라인 구성

by 지식과 지혜의 나무 2025. 5. 25.
반응형


안녕하세요!
이번에는 GitHub Actions를 활용해 CI/CD 파이프라인을 구축하는 방법을 단계별로 살펴보겠습니다.
코드 푸시 시 자동으로 테스트·빌드·배포까지 실행되는 워크플로우 예제와 주요 팁을 담았으니, 리포지토리에 바로 적용해보세요.



📋 목차
1. CI/CD 개요
2. GitHub Actions 기초
3. 워크플로우 파일 구조
4. 예제: Node.js 앱 테스트·빌드·Docker Hub 배포
5. 매트릭스 빌드 활용
6. 시크릿·환경 변수 관리
7. Best Practices & 주의사항
8. 마무리



1️⃣ CI/CD 개요
• CI(Continuous Integration): 코드 변경 시 자동으로 빌드·테스트 실행
• CD(Continuous Delivery/Deployment): 통과된 빌드 결과를 자동으로 스테이징·프로덕션에 배포
• 이점: 빠른 피드백·일관된 배포·인적 오류 감소



2️⃣ GitHub Actions 기초
• Workflow: .github/workflows/*.yml 파일로 정의
• Event: push, pull_request 등 트리거
• Job: 독립 환경에서 실행되는 단계 묶음
• Step: 하나의 커맨드 또는 액션 호출
• Runner: 워크플로우를 실행하는 호스트 (GitHub-hosted 또는 self-hosted)



3️⃣ 워크플로우 파일 구조

# .github/workflows/ci-cd.yml
name: CI/CD Pipeline

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

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: 코드 체크아웃
        uses: actions/checkout@v4

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

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

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

      - name: 빌드
        run: npm run build

  docker-publish:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Docker 로그인
        uses: docker/login-action@v2
        with:
          registry: docker.io
          username: ${{ secrets.DOCKERHUB_USER }}
          password: ${{ secrets.DOCKERHUB_TOKEN }}

      - name: 이미지 빌드 및 푸시
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          tags: yourusername/yourrepo:latest

• on: 트리거 이벤트 지정
• jobs: build→docker-publish 의존성 설정
• uses: 외부 액션 사용
• ${{ secrets.X }}: GitHub 리포지토리 시크릿 참조



4️⃣ 매트릭스 빌드 활용

  test-matrix:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [16, 18, 20]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: ${{ matrix.node }} }
      - run: npm ci
      - run: npm test

• 서로 다른 Node 버전·OS 조합에서 병렬 테스트 자동 실행
• matrix 설정으로 확장성 있는 테스트 환경 구성



5️⃣ 시크릿·환경 변수 관리
• Repository Settings → Secrets에 DOCKERHUB_USER, DOCKERHUB_TOKEN, AWS_ACCESS_KEY_ID 등 등록
• 워크플로우에서 ${{ secrets.SECRET_NAME }}로 안전하게 사용
• Environment 기능으로 스테이징·프로덕션 별 시크릿 분리 가능



6️⃣ Best Practices & 주의사항
• 의존성 캐시: actions/cache로 node_modules·Docker 레이어 캐시 활용
• 병렬화: 빌드·테스트·릴리즈 단계를 병렬로 실행해 전체 시간이 단축
• 작고 명확한 워크플로우: 하나의 워크플로우에 너무 많은 책임을 부여하지 않기
• 린팅·보안 검사: actions/setup-eslint, trivy-action 등을 통해 코드 품질·보안 체크
• 롤백 전략: 실패 시 특정 단계 이전 상태로 자동 복구 방안 마련



7️⃣ 마무리

GitHub Actions를 활용하면 별도 CI 인프라 없이도
“코드 푸시 → 자동 테스트·빌드 → 컨테이너 배포”를 손쉽게 구현할 수 있습니다.
위 예제와 팁을 참고해 여러분 리포지토리에 맞는 CI/CD 파이프라인을 구축해 보세요!

반응형