mirror of
https://github.com/cna-bootcamp/phonebill.git
synced 2026-06-13 03:59:10 +00:00
Jenkins CI/CD 파이프라인 완전 구축 및 가이드 개선
- Kustomize 기반 환경별 매니페스트 구조 생성 - Base: 공통 리소스 및 네임스페이스 설정 - Overlays: dev/staging/prod 환경별 설정 - Patch: 환경별 replicas, resources, 도메인 설정 - Jenkins 파이프라인 구축 - 완전한 Jenkinsfile 작성 (빌드, 테스트, 배포) - SonarQube 품질 분석 및 Quality Gate 적용 - ACR 이미지 빌드 및 푸시 자동화 - AKS 배포 자동화 - 환경별 설정 관리 - dev: 1 replica, 기본 리소스, HTTP - staging: 2 replicas, 중간 리소스, HTTPS - prod: 3 replicas, 고사양 리소스, HTTPS, 보안 강화 - 배포 자동화 도구 - 수동 배포 스크립트 작성 및 실행 권한 설정 - 롤백 방법 및 트러블슈팅 가이드 포함 - 완전한 구축 가이드 문서 작성 - Jenkins 환경 설정 방법 - Credentials 등록 방법 - Pipeline Job 생성 방법 - 배포 실행 및 모니터링 방법 - 체크리스트 및 트러블슈팅 가이드 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -4,37 +4,12 @@ set -e
|
||||
ENVIRONMENT=${1:-dev}
|
||||
IMAGE_TAG=${2:-latest}
|
||||
|
||||
echo "🚀 Starting deployment to ${ENVIRONMENT} environment with image tag: ${IMAGE_TAG}"
|
||||
echo "🚀 Starting deployment for 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..."
|
||||
|
||||
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}
|
||||
@@ -42,41 +17,21 @@ kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/bill-service:${
|
||||
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..."
|
||||
|
||||
echo "📦 Applying manifests to Kubernetes..."
|
||||
# 배포 실행
|
||||
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
|
||||
kubectl rollout status deployment/${ENVIRONMENT}-api-gateway -n phonebill-${ENVIRONMENT}
|
||||
kubectl rollout status deployment/${ENVIRONMENT}-user-service -n phonebill-${ENVIRONMENT}
|
||||
kubectl rollout status deployment/${ENVIRONMENT}-bill-service -n phonebill-${ENVIRONMENT}
|
||||
kubectl rollout status deployment/${ENVIRONMENT}-product-service -n phonebill-${ENVIRONMENT}
|
||||
kubectl rollout status deployment/${ENVIRONMENT}-kos-mock -n phonebill-${ENVIRONMENT}
|
||||
|
||||
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:"
|
||||
echo "🔍 Checking deployment status..."
|
||||
kubectl get pods -n phonebill-${ENVIRONMENT}
|
||||
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}"
|
||||
|
||||
echo "✅ Deployment completed successfully!"
|
||||
Reference in New Issue
Block a user