CI/CD 파이프라인
CI/CD 개요
제가 자주 사용하는 CI/CD 파이프라인입니다. GitHub Actions로 CI를 수행하고, ArgoCD로 CD를 자동화합니다.
GitHub Push → GitHub Actions (Build & Test) → Docker Registry → ArgoCD → KubernetesGitHub Actions
CI 워크플로우
.github/workflows/ci.yml:
| |
ArgoCD
Application 정의
| |
수동 동기화
| |
Kustomize
디렉토리 구조
k8s/
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
└── overlays/
├── development/
│ ├── kustomization.yaml
│ └── patches/
├── staging/
│ ├── kustomization.yaml
│ └── patches/
└── production/
├── kustomization.yaml
└── patches/Base
k8s/base/kustomization.yaml:
| |
Overlay (Production)
k8s/overlays/production/kustomization.yaml:
| |
Docker 이미지 빌드
Dockerfile
| |
Jib (Dockerfile 없이 빌드)
build.gradle.kts:
| |
빌드:
| |
배포 프로세스
1. 개발 환경
| |
2. Staging 환경
| |
3. Production 환경
| |
롤백
ArgoCD로 롤백
| |
Kubernetes로 롤백
| |
모니터링
배포 상태 확인
| |
Slack 알림
GitHub Actions에서 Slack으로 배포 알림:
| |
보안 (Security)
1. Secrets 관리
GitHub Actions Secrets:
| |
필수 Secret 항목:
GCP_PROJECT: GCP 프로젝트 IDGCP_SA_KEY: GCP Service Account Key (JSON)DATABASE_URL: 데이터베이스 연결 문자열SLACK_WEBHOOK: Slack 알림 Webhook URLDOCKER_REGISTRY_TOKEN: Docker Registry 인증 토큰
2. Container 보안
Trivy로 이미지 취약점 스캔:
| |
3. Docker Layer 최적화 및 보안
| |
4. SAST/DAST 보안 스캔
| |
5. Secret Manager 사용 (프로덕션)
Kubernetes에서 외부 Secret Manager 사용:
| |
6. 배포 권한 관리
RBAC로 배포 권한 제한:
| |
성능 (Performance)
1. Docker 이미지 최적화
Multi-stage Build + Layer 최적화:
| |
2. 빌드 캐시 전략
| |
3. 병렬 빌드 및 테스트
| |
4. 조건부 빌드
| |
안정성 (Reliability)
1. Blue-Green 배포
| |
2. Canary 배포
| |
3. Health Check 및 Readiness
| |
4. Rollback 전략
| |
5. 배포 알림 및 모니터링
| |
체크리스트
보안
- GitHub Secrets에 민감정보를 저장했는가?
- Container 이미지 취약점 스캔을 실행하는가?
- 비-root 사용자로 컨테이너를 실행하는가?
- SAST/DAST 보안 스캔을 수행하는가?
- 배포 권한이 RBAC로 제한되어 있는가?
성능
- Multi-stage build를 사용하는가?
- Docker Layer 캐싱을 활용하는가?
- 빌드/테스트를 병렬로 실행하는가?
- 불필요한 빌드를 스킵하는가?
안정성
- Blue-Green 또는 Canary 배포를 사용하는가?
- Health Check가 적절히 설정되어 있는가?
- 자동 롤백 조건이 정의되어 있는가?
- 배포 알림이 설정되어 있는가?
- Rollback 히스토리를 유지하는가?
트러블슈팅
이미지 Pull 실패
| |
ArgoCD Sync 실패
| |