# KT Event Marketing - CI/CD Infrastructure 이 디렉토리는 KT Event Marketing 백엔드 서비스의 CI/CD 인프라를 포함합니다. ## 디렉토리 구조 ``` .github/ ├── README.md # 이 파일 ├── workflows/ │ └── backend-cicd.yaml # GitHub Actions 워크플로우 ├── kustomize/ # Kubernetes 매니페스트 관리 │ ├── base/ # 기본 리소스 정의 │ │ ├── kustomization.yaml │ │ ├── cm-common.yaml │ │ ├── secret-common.yaml │ │ ├── secret-imagepull.yaml │ │ ├── ingress.yaml │ │ └── {service}-*.yaml # 각 서비스별 리소스 │ └── overlays/ # 환경별 설정 │ ├── dev/ │ │ ├── kustomization.yaml │ │ └── *-patch.yaml # 1 replica, 256Mi-1024Mi │ ├── staging/ │ │ ├── kustomization.yaml │ │ └── *-patch.yaml # 2 replicas, 512Mi-2048Mi │ └── prod/ │ ├── kustomization.yaml │ └── *-patch.yaml # 3 replicas, 1024Mi-4096Mi ├── config/ │ ├── deploy_env_vars_dev # Dev 환경 변수 │ ├── deploy_env_vars_staging # Staging 환경 변수 │ └── deploy_env_vars_prod # Prod 환경 변수 └── scripts/ ├── deploy.sh # 수동 배포 스크립트 ├── generate-patches.sh # 패치 파일 생성 스크립트 └── copy-manifests-to-base.py # 매니페스트 복사 스크립트 ``` ## 주요 파일 설명 ### workflows/backend-cicd.yaml GitHub Actions 워크플로우 정의 파일입니다. **트리거**: - develop 브랜치 push → dev 환경 배포 - main 브랜치 push → prod 환경 배포 - Manual workflow dispatch → 원하는 환경과 서비스 선택 **Jobs**: 1. `detect-changes`: 변경된 서비스 감지 2. `build-and-push`: 서비스 빌드 및 ACR 푸시 3. `deploy`: AKS에 배포 4. `notify`: 배포 결과 알림 ### kustomize/base/kustomization.yaml 모든 환경에서 공통으로 사용하는 기본 리소스를 정의합니다. **포함 리소스**: - Common ConfigMaps and Secrets - Ingress - 7개 서비스의 Deployment, Service, ConfigMap, Secret ### kustomize/overlays/{env}/kustomization.yaml 환경별 설정을 오버라이드합니다. **주요 차이점**: - 이미지 태그 (dev/staging/prod) - Replica 수 (1/2/3) - 리소스 할당량 (작음/중간/큼) ### scripts/deploy.sh 로컬에서 수동 배포를 위한 스크립트입니다. **사용법**: ```bash # 모든 서비스를 dev 환경에 배포 ./scripts/deploy.sh dev # 특정 서비스만 prod 환경에 배포 ./scripts/deploy.sh prod user-service ``` ## 배포 프로세스 ### 자동 배포 (GitHub Actions) 1. **Dev 환경**: ```bash git checkout develop git push origin develop ``` 2. **Prod 환경**: ```bash git checkout main git merge develop git push origin main ``` 3. **수동 배포**: - GitHub Actions UI → Run workflow - Environment 선택 (dev/staging/prod) - Service 선택 (all 또는 특정 서비스) ### 수동 배포 (로컬) ```bash # 사전 요구사항: Azure CLI, kubectl, kustomize 설치 # Azure 로그인 필요 # Dev 환경에 모든 서비스 배포 ./.github/scripts/deploy.sh dev # Prod 환경에 user-service만 배포 ./.github/scripts/deploy.sh prod user-service ``` ## 환경별 설정 | 환경 | 브랜치 | 이미지 태그 | Replicas | CPU Request | Memory Request | |------|--------|-------------|----------|-------------|----------------| | Dev | develop | dev | 1 | 256m | 256Mi | | Staging | manual | staging | 2 | 512m | 512Mi | | Prod | main | prod | 3 | 1024m | 1024Mi | ## 서비스 목록 1. **user-service** (8081) - 사용자 관리 2. **event-service** (8082) - 이벤트 관리 3. **ai-service** (8083) - AI 기반 콘텐츠 생성 4. **content-service** (8084) - 콘텐츠 관리 5. **distribution-service** (8085) - 경품 배포 6. **participation-service** (8086) - 이벤트 참여 7. **analytics-service** (8087) - 분석 및 통계 ## 모니터링 ### Pod 상태 확인 ```bash kubectl get pods -n kt-event-marketing ``` ### 로그 확인 ```bash # 실시간 로그 kubectl logs -n kt-event-marketing -l app=user-service -f # 이전 컨테이너 로그 kubectl logs -n kt-event-marketing --previous ``` ### 리소스 사용량 ```bash # Pod 리소스 kubectl top pods -n kt-event-marketing # Node 리소스 kubectl top nodes ``` ## 트러블슈팅 상세한 트러블슈팅 가이드는 [deployment/cicd/CICD-GUIDE.md](../../deployment/cicd/CICD-GUIDE.md)를 참조하세요. **주요 문제 해결**: - ImagePullBackOff → ACR Secret 확인 - CrashLoopBackOff → 로그 확인 및 환경 변수 검증 - Readiness Probe Failed → Context Path 및 Actuator 경로 확인 ## 롤백 ```bash # 이전 버전으로 롤백 kubectl rollout undo deployment/user-service -n kt-event-marketing # 특정 리비전으로 롤백 kubectl rollout undo deployment/user-service --to-revision=2 -n kt-event-marketing ``` ## 참고 자료 - [CI/CD 가이드 (한글)](../../deployment/cicd/CICD-GUIDE.md) - [GitHub Actions 공식 문서](https://docs.github.com/en/actions) - [Kustomize 공식 문서](https://kustomize.io/) - [Azure AKS 공식 문서](https://docs.microsoft.com/en-us/azure/aks/)