phonebill/.github/scripts/deploy-actions.sh
hiondal f3b068d101 GitHub Actions CI/CD 파이프라인 구축 완료
- GitHub Actions 전용 Kustomize 매니페스트 생성 (.github/kustomize/)
- 환경별 Overlay 구성 (dev/staging/prod)
- Base Kustomization 및 환경별 패치 파일 작성
- GitHub Actions 워크플로우 파일 작성 (.github/workflows/backend-cicd.yaml)
- 환경별 설정 파일 및 수동 배포 스크립트 작성
- CI/CD 구축 가이드 문서 생성 (.github/deploy-actions-cicd-back.md)

주요 기능:
- 자동 빌드/테스트/배포 파이프라인
- SonarQube 코드 품질 분석 (선택적)
- 환경별 최적화 설정 (리소스, 보안, 도메인)
- ACR 기반 컨테이너 이미지 관리
- 헬스체크 및 롤백 지원
2025-09-15 12:50:04 +09:00

64 lines
2.4 KiB
Bash

#!/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/${ENVIRONMENT}-$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=${ENVIRONMENT}-$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!"