phonebill/deployment/cicd/scripts/validate-cicd-setup.sh
hiondal 7f8593fb71 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>
2025-09-13 01:00:04 +09:00

128 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
# Base 리소스 누락 검증 스크립트 (범용)
echo "🔍 phonebill Base 리소스 누락 검증 시작..."
BASE_DIR="deployment/cicd/kustomize/base"
MISSING_RESOURCES=0
REQUIRED_FILES=("deployment.yaml" "service.yaml")
OPTIONAL_FILES=("cm-" "secret-")
# 1. 각 서비스 디렉토리의 파일 확인
echo "1. 서비스 디렉토리별 파일 목록:"
for dir in $BASE_DIR/*/; do
if [ -d "$dir" ] && [[ $(basename "$dir") != "common" ]]; then
service=$(basename "$dir")
echo "=== $service ==="
# 필수 파일 확인
for required in "${REQUIRED_FILES[@]}"; do
if [ -f "$dir$required" ]; then
echo "$required"
else
echo " ❌ MISSING REQUIRED: $required"
((MISSING_RESOURCES++))
fi
done
# 선택적 파일 확인
for optional in "${OPTIONAL_FILES[@]}"; do
files=($(ls "$dir"$optional*".yaml" 2>/dev/null))
if [ ${#files[@]} -gt 0 ]; then
for file in "${files[@]}"; do
echo "$(basename "$file")"
done
fi
done
echo ""
fi
done
# 2. Common 리소스 확인
echo "2. Common 리소스 확인:"
COMMON_DIR="$BASE_DIR/common"
if [ -d "$COMMON_DIR" ]; then
common_files=($(ls "$COMMON_DIR"/*.yaml 2>/dev/null))
if [ ${#common_files[@]} -gt 0 ]; then
for file in "${common_files[@]}"; do
echo " ✅ common/$(basename "$file")"
done
else
echo " ❌ Common 디렉토리에 YAML 파일이 없습니다"
((MISSING_RESOURCES++))
fi
else
echo " ❌ Common 디렉토리가 없습니다"
((MISSING_RESOURCES++))
fi
# 3. kustomization.yaml과 실제 파일 비교
echo ""
echo "3. kustomization.yaml 리소스 검증:"
if [ -f "$BASE_DIR/kustomization.yaml" ]; then
while IFS= read -r line; do
# resources 섹션의 YAML 파일 경로 추출
if [[ $line =~ ^[[:space:]]*-[[:space:]]*([^#]+\.yaml)[[:space:]]*$ ]]; then
resource_path=$(echo "${BASH_REMATCH[1]}" | xargs) # 공백 제거
full_path="$BASE_DIR/$resource_path"
if [ -f "$full_path" ]; then
echo "$resource_path"
else
echo " ❌ MISSING: $resource_path"
((MISSING_RESOURCES++))
fi
fi
done < "$BASE_DIR/kustomization.yaml"
else
echo " ❌ kustomization.yaml 파일이 없습니다"
((MISSING_RESOURCES++))
fi
# 4. kubectl kustomize 검증
echo ""
echo "4. Kustomize 빌드 테스트:"
if kubectl kustomize "$BASE_DIR" > /dev/null 2>&1; then
echo " ✅ Base kustomization 빌드 성공"
else
echo " ❌ Base kustomization 빌드 실패:"
kubectl kustomize "$BASE_DIR" 2>&1 | head -5 | sed 's/^/ /'
((MISSING_RESOURCES++))
fi
# 5. 환경별 overlay 검증
echo ""
echo "5. 환경별 Overlay 검증:"
for env in dev staging prod; do
overlay_dir="deployment/cicd/kustomize/overlays/$env"
if [ -d "$overlay_dir" ] && [ -f "$overlay_dir/kustomization.yaml" ]; then
if kubectl kustomize "$overlay_dir" > /dev/null 2>&1; then
echo "$env 환경 빌드 성공"
else
echo "$env 환경 빌드 실패"
((MISSING_RESOURCES++))
fi
else
echo " ⚠️ $env 환경 설정 없음 (선택사항)"
fi
done
# 결과 출력
echo ""
echo "======================================"
if [ $MISSING_RESOURCES -eq 0 ]; then
echo "🎯 검증 완료! 모든 리소스가 정상입니다."
echo "======================================"
exit 0
else
echo "$MISSING_RESOURCES개의 문제가 발견되었습니다."
echo "======================================"
echo ""
echo "💡 문제 해결 가이드:"
echo "1. 누락된 파일들을 base 디렉토리에 추가하세요"
echo "2. kustomization.yaml에서 존재하지 않는 파일 참조를 제거하세요"
echo "3. 파일명이 명명 규칙을 따르는지 확인하세요:"
echo " - ConfigMap: cm-{서비스명}.yaml"
echo " - Secret: secret-{서비스명}.yaml"
echo "4. 다시 검증: ./deployment/cicd/scripts/validate-cicd-setup.sh"
exit 1
fi