mirror of
https://github.com/cna-bootcamp/phonebill.git
synced 2026-06-13 03:59:10 +00:00
GitHub Actions CI/CD 파이프라인 구축 완료
- GitHub Actions 전용 Kustomize 매니페스트 구조 생성 - 환경별(dev/staging/prod) Overlay 및 Patch 파일 작성 - SonarQube 코드 품질 분석 통합 - Docker 이미지 빌드 및 Azure Container Registry 푸시 - Kubernetes 자동 배포 워크플로우 구성 - 수동 배포 스크립트 및 구축 가이드 문서 추가 주요 기능: - 자동 배포: Push/PR 시 dev 환경 자동 배포 - 수동 배포: 환경 선택 가능한 워크플로우 트리거 - 환경별 최적화: dev(1 replica), staging(2 replicas), prod(3 replicas) - 보안 설정: staging/prod HTTPS, JWT 토큰 유효시간 조정 - 롤백 지원: GitHub Actions, kubectl, 수동 스크립트 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,34 +0,0 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
ENVIRONMENT=${1:-dev}
|
||||
IMAGE_TAG=${2:-latest}
|
||||
|
||||
echo "🚀 Starting deployment for environment: $ENVIRONMENT with image tag: $IMAGE_TAG"
|
||||
|
||||
# 환경별 이미지 태그 업데이트
|
||||
cd deployment/cicd/kustomize/overlays/${ENVIRONMENT}
|
||||
|
||||
# 서비스 목록 (공백으로 구분)
|
||||
services="api-gateway user-service bill-service product-service kos-mock"
|
||||
|
||||
# 각 서비스 이미지 태그 업데이트
|
||||
for service in $services; do
|
||||
echo "📦 Updating image tag for $service to ${ENVIRONMENT}-${IMAGE_TAG}"
|
||||
kustomize edit set image acrdigitalgarage01.azurecr.io/phonebill/$service:${ENVIRONMENT}-${IMAGE_TAG}
|
||||
done
|
||||
|
||||
# 배포 실행
|
||||
echo "🔧 Applying manifests to Kubernetes cluster..."
|
||||
kubectl apply -k .
|
||||
|
||||
# 배포 상태 확인
|
||||
echo "⏳ Waiting for deployments to be ready..."
|
||||
for service in $services; do
|
||||
echo " Checking $service..."
|
||||
kubectl rollout status deployment/$service -n phonebill-${ENVIRONMENT} --timeout=300s
|
||||
done
|
||||
|
||||
echo "✅ Deployment completed successfully!"
|
||||
echo "🌐 Application endpoints:"
|
||||
kubectl get ingress -n phonebill-${ENVIRONMENT} -o wide
|
||||
@@ -1,128 +0,0 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user