Jenkins CI/CD 파이프라인 완전 구축 완료

- Kustomize 기반 환경별 매니페스트 관리 시스템 구축
- Base 매니페스트 및 환경별(dev/staging/prod) Overlay 작성
- Strategic Merge Patch → Patch 형식으로 업데이트
- Jenkinsfile 파드 자동 정리 기능 적용
- 배포 스크립트 및 검증 스크립트 작성
- 상세 구축 가이드 문서 작성
- 모든 환경 Kustomize 빌드 검증 완료

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
hiondal
2025-09-13 01:00:04 +09:00
parent e72f7ac9f6
commit 7f8593fb71
41 changed files with 605 additions and 726 deletions
+8 -21
View File
@@ -4,7 +4,7 @@ set -e
ENVIRONMENT=${1:-dev}
IMAGE_TAG=${2:-latest}
echo "🚀 Starting manual deployment for environment: $ENVIRONMENT with tag: $IMAGE_TAG"
echo "🚀 Starting deployment for environment: $ENVIRONMENT with image tag: $IMAGE_TAG"
# 환경별 이미지 태그 업데이트
cd deployment/cicd/kustomize/overlays/${ENVIRONMENT}
@@ -12,36 +12,23 @@ cd deployment/cicd/kustomize/overlays/${ENVIRONMENT}
# 서비스 목록 (공백으로 구분)
services="api-gateway user-service bill-service product-service kos-mock"
echo "📦 Updating image tags for services: $services"
# 각 서비스 이미지 태그 업데이트
for service in $services; do
echo " Updating $service to ${ENVIRONMENT}-${IMAGE_TAG}"
echo "📦 Updating image tag for $service to ${ENVIRONMENT}-${IMAGE_TAG}"
kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/$service:${ENVIRONMENT}-${IMAGE_TAG}
done
echo "🚢 Deploying to Kubernetes cluster..."
# 배포 실행
echo "🔧 Applying manifests to Kubernetes cluster..."
kubectl apply -k .
echo "⏰ Waiting for deployments to be ready..."
# 배포 상태 확인
echo "⏳ Waiting for deployments to be ready..."
for service in $services; do
echo " 🔄 Waiting for $service deployment..."
kubectl rollout status deployment/$service -n phonebill-${ENVIRONMENT}
echo " Checking $service..."
kubectl rollout status deployment/$service -n phonebill-${ENVIRONMENT} --timeout=300s
done
echo "✅ Deployment completed successfully!"
echo ""
echo "📋 Deployment Summary:"
echo " Environment: $ENVIRONMENT"
echo " Image Tag: ${ENVIRONMENT}-${IMAGE_TAG}"
echo " Services: $services"
echo " Namespace: phonebill-${ENVIRONMENT}"
echo ""
echo "🔍 Check deployment status:"
echo " kubectl get pods -n phonebill-${ENVIRONMENT}"
echo " kubectl get services -n phonebill-${ENVIRONMENT}"
echo " kubectl get ingress -n phonebill-${ENVIRONMENT}"
echo "🌐 Application endpoints:"
kubectl get ingress -n phonebill-${ENVIRONMENT} -o wide
+4 -78
View File
@@ -1,7 +1,7 @@
#!/bin/bash
# phonebill CI/CD 설정 검증 스크립트
# Base 리소스 누락 검증 스크립트 (범용)
echo "🔍 phonebill CI/CD 설정 검증 시작..."
echo "🔍 phonebill Base 리소스 누락 검증 시작..."
BASE_DIR="deployment/cicd/kustomize/base"
MISSING_RESOURCES=0
@@ -106,85 +106,12 @@ for env in dev staging prod; do
fi
done
# 6. Jenkins 파이프라인 검증
echo ""
echo "6. Jenkins 파이프라인 검증:"
if [ -f "deployment/cicd/Jenkinsfile" ]; then
echo " ✅ Jenkinsfile 존재"
# 주요 서비스명 확인
services_in_jenkinsfile=$(grep -o "api-gateway\|user-service\|bill-service\|product-service\|kos-mock" deployment/cicd/Jenkinsfile | sort -u | tr '\n' ' ')
echo " 📋 Jenkinsfile의 서비스: $services_in_jenkinsfile"
# ACR 이름 확인
acr_name=$(grep -o "acrdigitalgarage01" deployment/cicd/Jenkinsfile | head -1)
if [ -n "$acr_name" ]; then
echo " ✅ ACR 이름: $acr_name"
else
echo " ⚠️ ACR 이름을 찾을 수 없습니다"
fi
else
echo " ❌ Jenkinsfile이 없습니다"
((MISSING_RESOURCES++))
fi
# 7. 스크립트 파일 검증
echo ""
echo "7. 배포 스크립트 검증:"
scripts_dir="deployment/cicd/scripts"
if [ -f "$scripts_dir/deploy.sh" ]; then
echo " ✅ deploy.sh 존재"
if [ -x "$scripts_dir/deploy.sh" ]; then
echo " ✅ deploy.sh 실행 권한 있음"
else
echo " ⚠️ deploy.sh 실행 권한 없음 (chmod +x 필요)"
fi
else
echo " ❌ deploy.sh가 없습니다"
((MISSING_RESOURCES++))
fi
# 8. 환경별 설정 파일 검증
echo ""
echo "8. 환경별 설정 파일 검증:"
config_dir="deployment/cicd/config"
for env in dev staging prod; do
config_file="$config_dir/deploy_env_vars_$env"
if [ -f "$config_file" ]; then
echo "$env 환경 설정 파일 존재"
# 필수 설정 확인
if grep -q "resource_group\|cluster_name" "$config_file"; then
echo " ✅ 필수 설정 (resource_group, cluster_name) 확인됨"
else
echo " ❌ 필수 설정이 누락됨"
((MISSING_RESOURCES++))
fi
else
echo "$env 환경 설정 파일이 없습니다"
((MISSING_RESOURCES++))
fi
done
# 결과 출력
echo ""
echo "======================================"
if [ $MISSING_RESOURCES -eq 0 ]; then
echo "🎯 검증 완료! phonebill CI/CD 설정이 정상입니다."
echo "🎯 검증 완료! 모든 리소스가 정상입니다."
echo "======================================"
echo ""
echo "📋 Jenkins CI/CD 파이프라인 구성 요약:"
echo " • 시스템명: phonebill"
echo " • 서비스: api-gateway, user-service, bill-service, product-service, kos-mock"
echo " • 환경: dev, staging, prod"
echo " • 컨테이너 레지스트리: acrdigitalgarage01.azurecr.io"
echo " • JDK 버전: 21"
echo ""
echo "🚀 다음 단계:"
echo " 1. Jenkins에서 Pipeline Job 생성"
echo " 2. Jenkins Credentials 설정 (azure-credentials, acr-credentials, dockerhub-credentials)"
echo " 3. SonarQube 서버 연동 설정"
echo " 4. 파이프라인 실행 테스트"
echo ""
exit 0
else
echo "$MISSING_RESOURCES개의 문제가 발견되었습니다."
@@ -196,7 +123,6 @@ else
echo "3. 파일명이 명명 규칙을 따르는지 확인하세요:"
echo " - ConfigMap: cm-{서비스명}.yaml"
echo " - Secret: secret-{서비스명}.yaml"
echo "4. 스크립트 실행 권한 설정: chmod +x scripts/*.sh"
echo "5. 다시 검증: ./scripts/validate-cicd-setup.sh"
echo "4. 다시 검증: ./deployment/cicd/scripts/validate-cicd-setup.sh"
exit 1
fi