flea/_deploy/scripts/rollback.sh
ruberoid 604ac1f507 issues/7 (#8)
Co-authored-by: ruberoid <dcharushnikov@gmail.com>
Reviewed-on: #8
2025-10-16 13:58:17 +00:00

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"