hiondal 042198deb0 Jenkins CI/CD 파이프라인 완전 구축 및 가이드 개선
주요 작업:
- Kustomize 기반 환경별 배포 구조 완성 (dev/staging/prod)
- deployment-patch.yaml 개선: replicas + resources 통합 관리
- Strategic Merge Patch 형식으로 변경하여 가독성 및 유지보수성 향상
- 환경별 차등 리소스 할당 정책 적용
- Jenkins 파이프라인 스크립트 및 수동 배포 스크립트 완성
- 상세한 체크리스트 및 실수 방지 가이드 추가

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 12:09:54 +09:00

82 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
set -e
ENVIRONMENT=${1:-dev}
IMAGE_TAG=${2:-latest}
echo "🚀 Starting deployment to ${ENVIRONMENT} environment with image tag: ${IMAGE_TAG}"
# 환경 검증
if [[ ! "$ENVIRONMENT" =~ ^(dev|staging|prod)$ ]]; then
echo "❌ Error: Invalid environment. Use dev, staging, or prod"
exit 1
fi
# Kustomize 설치 확인
if ! command -v kustomize &> /dev/null; then
echo "📦 Installing Kustomize..."
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
sudo mv kustomize /usr/local/bin/
fi
# kubectl 연결 확인
if ! kubectl cluster-info &> /dev/null; then
echo "❌ Error: Unable to connect to Kubernetes cluster"
echo "Please ensure kubectl is configured properly"
exit 1
fi
# 네임스페이스 생성
echo "🔧 Creating namespace phonebill-${ENVIRONMENT} if not exists..."
kubectl create namespace phonebill-${ENVIRONMENT} --dry-run=client -o yaml | kubectl apply -f -
# 환경별 디렉토리로 이동
cd deployment/cicd/kustomize/overlays/${ENVIRONMENT}
echo "🏷️ Updating image tags..."
# 각 서비스 이미지 태그 업데이트
kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/api-gateway:${ENVIRONMENT}-${IMAGE_TAG}
kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/user-service:${ENVIRONMENT}-${IMAGE_TAG}
kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/bill-service:${ENVIRONMENT}-${IMAGE_TAG}
kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/product-service:${ENVIRONMENT}-${IMAGE_TAG}
kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/kos-mock:${ENVIRONMENT}-${IMAGE_TAG}
echo "📋 Applying Kubernetes manifests..."
# 배포 실행
kubectl apply -k .
echo "⏳ Waiting for deployments to be ready..."
# 배포 상태 확인
kubectl rollout status deployment/${ENVIRONMENT}-api-gateway -n phonebill-${ENVIRONMENT} --timeout=300s
kubectl rollout status deployment/${ENVIRONMENT}-user-service -n phonebill-${ENVIRONMENT} --timeout=300s
kubectl rollout status deployment/${ENVIRONMENT}-bill-service -n phonebill-${ENVIRONMENT} --timeout=300s
kubectl rollout status deployment/${ENVIRONMENT}-product-service -n phonebill-${ENVIRONMENT} --timeout=300s
kubectl rollout status deployment/${ENVIRONMENT}-kos-mock -n phonebill-${ENVIRONMENT} --timeout=300s
echo "🔍 Health Check..."
# API Gateway Health Check
GATEWAY_POD=$(kubectl get pod -n phonebill-${ENVIRONMENT} -l app=api-gateway -o jsonpath='{.items[0].metadata.name}')
if kubectl -n phonebill-${ENVIRONMENT} exec $GATEWAY_POD -- curl -f http://localhost:8080/actuator/health > /dev/null 2>&1; then
echo "✅ API Gateway is healthy!"
else
echo "⚠️ API Gateway health check failed, but deployment completed"
fi
echo ""
echo "✅ Deployment completed successfully!"
echo ""
echo "📊 Deployment Status:"
kubectl get pods -n phonebill-${ENVIRONMENT} -l app=phonebill
echo ""
echo "🌐 Services:"
kubectl get services -n phonebill-${ENVIRONMENT}
echo ""
echo "🔗 Ingress:"
kubectl get ingress -n phonebill-${ENVIRONMENT}
echo ""
echo "🎯 Environment: ${ENVIRONMENT}"
echo "🏷️ Image Tag: ${ENVIRONMENT}-${IMAGE_TAG}"