106 lines
4.4 KiB
Bash
Executable File
106 lines
4.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
# ⏮️ Nocr Services Rollback Script
|
|
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
# Usage: ./rollback.sh [deployment-name]
|
|
# Example: ./rollback.sh telegram-listener
|
|
# ./rollback.sh all (rolls back all deployments)
|
|
# ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
|
|
DEPLOYMENT=${1:-all}
|
|
NAMESPACE="nocr"
|
|
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "⏮️ Starting rollback of Nocr services"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🎯 Deployment: $DEPLOYMENT"
|
|
echo "🎯 Namespace: $NAMESPACE"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
|
|
# Check if kubectl is available
|
|
if ! command -v kubectl &> /dev/null; then
|
|
echo "❌ kubectl not found. Please install kubectl."
|
|
exit 1
|
|
fi
|
|
|
|
# Check cluster connection
|
|
echo "🔍 Checking connection to Kubernetes cluster..."
|
|
if ! kubectl cluster-info &> /dev/null; then
|
|
echo "❌ Cannot connect to Kubernetes cluster."
|
|
exit 1
|
|
fi
|
|
echo "✅ Connected to cluster"
|
|
|
|
# Function to rollback a single deployment
|
|
rollback_deployment() {
|
|
local dep=$1
|
|
echo ""
|
|
echo "⏮️ Rolling back deployment: $dep"
|
|
|
|
# Check if deployment exists
|
|
if ! kubectl get deployment "$dep" -n "$NAMESPACE" &> /dev/null; then
|
|
echo "⚠️ Deployment $dep not found in namespace $NAMESPACE"
|
|
return 1
|
|
fi
|
|
|
|
# Show current revision
|
|
echo "📊 Current revision:"
|
|
kubectl rollout history deployment/"$dep" -n "$NAMESPACE" | tail -5
|
|
|
|
# Perform rollback
|
|
echo "🔄 Rolling back..."
|
|
if kubectl rollout undo deployment/"$dep" -n "$NAMESPACE"; then
|
|
echo "✅ Rollback command issued for $dep"
|
|
|
|
# Wait for rollback to complete
|
|
echo "⏳ Waiting for rollback to complete..."
|
|
if kubectl rollout status deployment/"$dep" -n "$NAMESPACE" --timeout=300s; then
|
|
echo "✅ $dep rolled back successfully"
|
|
else
|
|
echo "❌ $dep rollback failed or timed out"
|
|
echo "🔍 Pod status:"
|
|
kubectl get pods -n "$NAMESPACE" -l app="$dep"
|
|
return 1
|
|
fi
|
|
else
|
|
echo "❌ Failed to rollback $dep"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
# Rollback deployments
|
|
DEPLOYMENTS=("telegram-listener" "text-matcher" "users" "telegram-client")
|
|
|
|
if [ "$DEPLOYMENT" = "all" ]; then
|
|
echo "🔄 Rolling back all deployments..."
|
|
FAILED=0
|
|
for dep in "${DEPLOYMENTS[@]}"; do
|
|
if ! rollback_deployment "$dep"; then
|
|
FAILED=$((FAILED + 1))
|
|
fi
|
|
done
|
|
|
|
if [ $FAILED -gt 0 ]; then
|
|
echo ""
|
|
echo "❌ $FAILED deployment(s) failed to rollback"
|
|
exit 1
|
|
fi
|
|
else
|
|
# Rollback single deployment
|
|
if ! rollback_deployment "$DEPLOYMENT"; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "✅ Rollback completed successfully!"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "📊 Pod status:"
|
|
kubectl get pods -n "$NAMESPACE" -o wide
|
|
echo ""
|
|
echo "🔍 Running health checks..."
|
|
bash "$(dirname "$0")/health-check.sh"
|