#!/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}"