mirror of
https://github.com/ktds-dg0501/kt-event-marketing.git
synced 2025-12-06 14:46:23 +00:00
- GitHub Actions workflow로 백엔드 서비스 자동 빌드/배포 구성 - Kustomize를 통한 dev/staging/prod 환경별 설정 관리 - 각 마이크로서비스별 Dockerfile 추가 - 배포 자동화 스크립트 및 환경 변수 설정 - CI/CD 가이드 문서 작성
187 lines
5.5 KiB
Markdown
187 lines
5.5 KiB
Markdown
# 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 <pod-name> --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/)
|