mirror of
https://github.com/won-ktds/smarketing-backend.git
synced 2025-12-06 07:06:24 +00:00
89 lines
4.6 KiB
Groovy
89 lines
4.6 KiB
Groovy
stage('Generate & Apply Manifest') {
|
|
container('envsubst') {
|
|
script {
|
|
def postgresPort = "'" + (props.POSTGRES_PORT ?: '5432') + "'"
|
|
def redisPort = "'" + (props.REDIS_PORT ?: '6379') + "'"
|
|
|
|
sh """
|
|
echo "=== 환경변수 설정 ==="
|
|
export namespace=${namespace}
|
|
export allowed_origins=${props.allowed_origins}
|
|
export jwt_secret_key=${props.jwt_secret_key}
|
|
export postgres_user=${props.postgres_user}
|
|
export postgres_password=${props.postgres_password}
|
|
export replicas=${props.replicas}
|
|
|
|
# PostgreSQL 환경변수 추가 (문자열로)
|
|
export postgres_host=${props.POSTGRES_HOST}
|
|
export postgres_port=${postgresPort}
|
|
export postgres_db_member=member
|
|
export postgres_db_store=store
|
|
export postgres_db_marketing_content=marketing_content
|
|
export postgres_db_ai_recommend=AiRecommendationDB
|
|
|
|
# Redis 환경변수 추가 (문자열로)
|
|
export redis_host=${props.REDIS_HOST}
|
|
export redis_port=${redisPort}
|
|
export redis_password=${props.REDIS_PASSWORD}
|
|
|
|
# 리소스 요구사항
|
|
export resources_requests_cpu=${props.resources_requests_cpu}
|
|
export resources_requests_memory=${props.resources_requests_memory}
|
|
export resources_limits_cpu=${props.resources_limits_cpu}
|
|
export resources_limits_memory=${props.resources_limits_memory}
|
|
|
|
# 이미지 경로 환경변수 설정
|
|
export member_image_path=${props.registry}/${props.image_org}/member:${imageTag}
|
|
export store_image_path=${props.registry}/${props.image_org}/store:${imageTag}
|
|
export marketing_content_image_path=${props.registry}/${props.image_org}/marketing-content:${imageTag}
|
|
export ai_recommend_image_path=${props.registry}/${props.image_org}/ai-recommend:${imageTag}
|
|
|
|
echo "=== Manifest 생성 ==="
|
|
envsubst < smarketing-java/deployment/${manifest}.template > smarketing-java/deployment/${manifest}
|
|
|
|
echo "=== Generated Manifest File ==="
|
|
cat smarketing-java/deployment/${manifest}
|
|
echo "==============================="
|
|
"""
|
|
}
|
|
}
|
|
|
|
container('azure-cli') {
|
|
sh """
|
|
echo "=== 기존 ConfigMap 삭제 (타입 충돌 해결) ==="
|
|
kubectl delete configmap member-config store-config marketing-content-config ai-recommend-config -n ${namespace} --ignore-not-found=true
|
|
|
|
echo "=== 현재 연결된 클러스터 재확인 ==="
|
|
kubectl config current-context
|
|
kubectl cluster-info | head -3
|
|
|
|
echo "=== PostgreSQL 서비스 확인 ==="
|
|
kubectl get svc -n ${namespace} | grep postgresql || echo "PostgreSQL 서비스가 없습니다. 먼저 설치해주세요."
|
|
|
|
echo "=== Manifest 적용 ==="
|
|
kubectl apply -f smarketing-java/deployment/${manifest}
|
|
|
|
echo "=== 배포 상태 확인 (60초 대기) ==="
|
|
kubectl -n ${namespace} get deployments
|
|
kubectl -n ${namespace} get pods
|
|
|
|
echo "=== 각 서비스 배포 대기 (60초 timeout) ==="
|
|
timeout 60 kubectl -n ${namespace} wait --for=condition=available deployment/member --timeout=60s || echo "member deployment 대기 타임아웃"
|
|
timeout 60 kubectl -n ${namespace} wait --for=condition=available deployment/store --timeout=60s || echo "store deployment 대기 타임아웃"
|
|
timeout 60 kubectl -n ${namespace} wait --for=condition=available deployment/marketing-content --timeout=60s || echo "marketing-content deployment 대기 타임아웃"
|
|
timeout 60 kubectl -n ${namespace} wait --for=condition=available deployment/ai-recommend --timeout=60s || echo "ai-recommend deployment 대기 타임아웃"
|
|
|
|
echo "=== 최종 상태 ==="
|
|
kubectl -n ${namespace} get all
|
|
|
|
echo "=== 실패한 Pod 상세 정보 ==="
|
|
for pod in \$(kubectl -n ${namespace} get pods --field-selector=status.phase!=Running -o name 2>/dev/null || true); do
|
|
if [ ! -z "\$pod" ]; then
|
|
echo "=== 실패한 Pod: \$pod ==="
|
|
kubectl -n ${namespace} describe \$pod | tail -20
|
|
fi
|
|
done
|
|
"""
|
|
}
|
|
}
|