#!/bin/bash set -e ENVIRONMENT=${1:-dev} IMAGE_TAG=${2:-latest} echo "๐Ÿš€ Manual deployment starting..." echo "Environment: $ENVIRONMENT" echo "Image Tag: $IMAGE_TAG" # Check if kustomize is installed 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 # Load environment variables from .github/config if [[ -f ".github/config/deploy_env_vars_${ENVIRONMENT}" ]]; then source ".github/config/deploy_env_vars_${ENVIRONMENT}" echo "โœ… Environment variables loaded for $ENVIRONMENT" else echo "โŒ Environment configuration file not found: .github/config/deploy_env_vars_${ENVIRONMENT}" exit 1 fi # Create namespace echo "๐Ÿ“ Creating namespace phonebill-${ENVIRONMENT}..." kubectl create namespace phonebill-${ENVIRONMENT} --dry-run=client -o yaml | kubectl apply -f - # ํ™˜๊ฒฝ๋ณ„ ์ด๋ฏธ์ง€ ํƒœ๊ทธ ์—…๋ฐ์ดํŠธ (.github/kustomize ์‚ฌ์šฉ) cd .github/kustomize/overlays/${ENVIRONMENT} echo "๐Ÿ”„ Updating image tags..." # ์„œ๋น„์Šค ๋ฐฐ์—ด ์ •์˜ services=(api-gateway user-service bill-service product-service kos-mock) # ๊ฐ ์„œ๋น„์Šค๋ณ„ ์ด๋ฏธ์ง€ ํƒœ๊ทธ ์—…๋ฐ์ดํŠธ for service in "${services[@]}"; do kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/$service:${ENVIRONMENT}-${IMAGE_TAG} done echo "๐Ÿš€ Deploying to Kubernetes..." # ๋ฐฐํฌ ์‹คํ–‰ kubectl apply -k . echo "โณ Waiting for deployments to be ready..." # ์„œ๋น„์Šค๋ณ„ ๋ฐฐํฌ ์ƒํƒœ ํ™•์ธ for service in "${services[@]}"; do kubectl rollout status deployment/$service -n phonebill-${ENVIRONMENT} --timeout=300s done echo "๐Ÿ” Health check..." # API Gateway Health Check (์ฒซ ๋ฒˆ์งธ ์„œ๋น„์Šค๊ฐ€ API Gateway๋ผ๊ณ  ๊ฐ€์ •) GATEWAY_SERVICE=${services[0]} GATEWAY_POD=$(kubectl get pod -n phonebill-${ENVIRONMENT} -l app.kubernetes.io/name=$GATEWAY_SERVICE -o jsonpath='{.items[0].metadata.name}') kubectl -n phonebill-${ENVIRONMENT} exec $GATEWAY_POD -- curl -f http://localhost:8080/actuator/health || echo "Health check failed, but deployment completed" echo "๐Ÿ“‹ Service Information:" kubectl get pods -n phonebill-${ENVIRONMENT} kubectl get services -n phonebill-${ENVIRONMENT} kubectl get ingress -n phonebill-${ENVIRONMENT} echo "โœ… GitHub Actions deployment completed successfully!"