티스토리 뷰

반응형

📌 NestJS + Kubernetes & 마이크로서비스 배포: 실전 가이드

6. NestJS CI/CD 자동화 파이프라인 구축하기 (GitHub Actions + ArgoCD + Helm)


NestJS 마이크로서비스를 Kubernetes 환경에서 안정적으로 운영하기 위해서는 CI/CD(지속적 통합 및 배포) 파이프라인 구축이 필수입니다.
이번 글에서는 GitHub Actions를 이용한 자동 빌드/푸시, Helm으로 배포 설정 자동화, 그리고 ArgoCD를 통한 GitOps 방식 클러스터 배포 자동화를 단계별로 정리합니다. 🚀


✅ 1. CI/CD 구조 개요

[개발자 Git Push]
       ↓
[GitHub Actions]
 - NestJS 빌드
 - Docker 이미지 생성 & 푸시
       ↓
[Helm Chart 업데이트]
       ↓
[ArgoCD]
 - 변경 감지 → 자동 배포
 - Kubernetes 클러스터에 반영

✅ 2. GitHub Actions 설정

📂 .github/workflows/deploy.yml

name: CI/CD for NestJS Microservices

on:
  push:
    branches: [ main ]

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

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

      - name: Set up Docker
        uses: docker/setup-buildx-action@v2

      - name: Log in to DockerHub
        run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin

      - name: Build and Push API Gateway
        run: |
          docker build -f docker/Dockerfile.api-gateway -t ${{ secrets.DOCKER_USERNAME }}/api-gateway:latest .
          docker push ${{ secrets.DOCKER_USERNAME }}/api-gateway:latest

      - name: Build and Push User Service
        run: |
          docker build -f docker/Dockerfile.user-service -t ${{ secrets.DOCKER_USERNAME }}/user-service:latest .
          docker push ${{ secrets.DOCKER_USERNAME }}/user-service:latest

🔐 secrets 설정은 GitHub Repository → Settings → Secrets → Actions 에서 등록


✅ 3. Helm Chart values 자동 업데이트 (선택)

방법 1: 수동으로 이미지 태그 수정

반응형

📂 helm/values.yaml

apiGateway:
  image: your-docker-id/api-gateway:latest
userService:
  image: your-docker-id/user-service:latest

방법 2: GitOps 방식 → ArgoCD에서 Git만 감지하고 자동 반영


✅ 4. ArgoCD로 GitOps 배포 자동화

✅ 설치 (Kubernetes 클러스터에)

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

✅ UI 접속

kubectl port-forward svc/argocd-server -n argocd 8080:443

브라우저 접속 → https://localhost:8080


✅ 5. ArgoCD 앱 생성

argocd app create nestjs-ms \
  --repo https://github.com/your-id/nestjs-ms \
  --path helm \
  --dest-server https://kubernetes.default.svc \
  --dest-namespace default \
  --sync-policy automated

✅ 자동 동기화

argocd app set nestjs-ms --sync-policy automated

✅ 이제 GitHub에 코드가 머지되면 → GitHub Actions가 이미지 푸시 → Helm values 변경 → ArgoCD가 변경 감지 → Kubernetes에 자동 배포 완료!


✅ 6. 실전 Tips

  • latest 태그 대신 git commit hash로 태그 버전화 → 롤백 용이
  • Helm upgrade는 ArgoCD 내부에서 자동 수행
  • Preview 환경을 위한 분기별 ArgoCD 앱 구성 추천 (dev, staging, prod)
  • Helm secrets, Sealed Secrets, SOPS 등을 통한 보안 설정 연동 가능

✅ 결론: NestJS 마이크로서비스의 CI/CD 완전 자동화

✅ GitHub Actions로 자동 빌드 및 푸시
✅ Helm으로 배포 템플릿 관리
✅ ArgoCD로 Git 기반 배포 자동화(GitOps 방식)
✅ DevOps 없는 소규모 팀도 효율적인 운영 가능

다음 글에서는 **NestJS 서비스 운영 시 성능 최적화 및 보안 강화 전략 (HPA, Rate Limiting, Monitoring 등)**을 다룹니다.


🔍 다음 글 예고: NestJS 마이크로서비스 운영 최적화 & 보안 전략

📌 다음 편: 7. NestJS 운영 환경 성능 최적화 & 보안 가이드


 

NestJS CI/CD,NestJS GitHub Actions,NestJS ArgoCD,NestJS 배포 자동화,NestJS Helm Chart,NestJS GitOps,NestJS Kubernetes 배포 자동화,NestJS 마이크로서비스 운영,NestJS DevOps,NestJS Docker CI/CD

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함
반응형