Some checks failed
CI/CD Pipeline / Code Quality & Linting (push) Has been cancelled
CI/CD Pipeline / Policy Validation (push) Has been cancelled
CI/CD Pipeline / Test Suite (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-firm-connectors) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-forms) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-hmrc) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ingestion) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-normalize-map) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-ocr) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-indexer) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-reason) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (svc-rpa) (push) Has been cancelled
CI/CD Pipeline / Build Docker Images (ui-review) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-coverage) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-extract) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-kg) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (svc-rag-retriever) (push) Has been cancelled
CI/CD Pipeline / Security Scanning (ui-review) (push) Has been cancelled
CI/CD Pipeline / Generate SBOM (push) Has been cancelled
CI/CD Pipeline / Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Notifications (push) Has been cancelled
140 lines
3.9 KiB
Bash
Executable File
140 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Rollback Deployment Script
|
|
# Restores previous deployment from backup
|
|
|
|
set -e
|
|
|
|
# Colors
|
|
GREEN='\033[0;32m'
|
|
RED='\033[0;31m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
REMOTE_USER="${REMOTE_USER:-deploy}"
|
|
REMOTE_HOST="${REMOTE_HOST:-141.136.35.199}"
|
|
REMOTE_DIR="/opt/ai-tax-agent"
|
|
|
|
echo -e "${RED}========================================${NC}"
|
|
echo -e "${RED}AI Tax Agent - Deployment Rollback${NC}"
|
|
echo -e "${RED}========================================${NC}"
|
|
echo ""
|
|
|
|
# Confirm rollback
|
|
echo -e "${YELLOW}WARNING: This will rollback to the previous deployment!${NC}"
|
|
echo -e "${YELLOW}All current changes will be lost.${NC}"
|
|
echo ""
|
|
read -p "Are you sure you want to rollback? (yes/no): " confirm
|
|
|
|
if [ "$confirm" != "yes" ]; then
|
|
echo -e "${BLUE}Rollback cancelled.${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
echo ""
|
|
echo -e "${BLUE}Step 1: Listing available backups${NC}"
|
|
echo "-----------------------------------"
|
|
|
|
ssh ${REMOTE_USER}@${REMOTE_HOST} "ls -lht ${REMOTE_DIR}/backups/ | head -10"
|
|
|
|
echo ""
|
|
read -p "Enter backup timestamp to restore (e.g., 20250104_120000): " backup_timestamp
|
|
|
|
if [ -z "$backup_timestamp" ]; then
|
|
echo -e "${RED}No backup timestamp provided. Exiting.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
BACKUP_DIR="${REMOTE_DIR}/backups/${backup_timestamp}"
|
|
|
|
echo ""
|
|
echo -e "${BLUE}Step 2: Verifying backup exists${NC}"
|
|
echo "--------------------------------"
|
|
|
|
if ! ssh ${REMOTE_USER}@${REMOTE_HOST} "[ -d ${BACKUP_DIR} ]"; then
|
|
echo -e "${RED}Backup directory not found: ${BACKUP_DIR}${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✓ Backup found${NC}"
|
|
|
|
echo ""
|
|
echo -e "${BLUE}Step 3: Stopping current services${NC}"
|
|
echo "----------------------------------"
|
|
|
|
ssh ${REMOTE_USER}@${REMOTE_HOST} << 'EOF'
|
|
cd /opt/ai-tax-agent
|
|
docker compose -f compose/production/services.yaml down
|
|
docker compose -f compose/production/infrastructure.yaml down
|
|
docker compose -f compose/production/monitoring.yaml down
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ Services stopped${NC}"
|
|
|
|
echo ""
|
|
echo -e "${BLUE}Step 4: Restoring configuration files${NC}"
|
|
echo "--------------------------------------"
|
|
|
|
ssh ${REMOTE_USER}@${REMOTE_HOST} << EOF
|
|
# Restore compose files
|
|
cp ${BACKUP_DIR}/infrastructure.yaml ${REMOTE_DIR}/compose/production/
|
|
cp ${BACKUP_DIR}/services.yaml ${REMOTE_DIR}/compose/production/
|
|
cp ${BACKUP_DIR}/monitoring.yaml ${REMOTE_DIR}/compose/production/
|
|
|
|
# Restore environment file
|
|
cp ${BACKUP_DIR}/.env.production ${REMOTE_DIR}/compose/
|
|
|
|
# Restore Traefik config if exists
|
|
if [ -f ${BACKUP_DIR}/traefik-dynamic.yml ]; then
|
|
cp ${BACKUP_DIR}/traefik-dynamic.yml /opt/compose/traefik/config/
|
|
fi
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ Configuration restored${NC}"
|
|
|
|
echo ""
|
|
echo -e "${BLUE}Step 5: Restarting services${NC}"
|
|
echo "---------------------------"
|
|
|
|
ssh ${REMOTE_USER}@${REMOTE_HOST} << 'EOF'
|
|
cd /opt/ai-tax-agent
|
|
|
|
# Start infrastructure first
|
|
docker compose -f compose/production/infrastructure.yaml up -d
|
|
|
|
# Wait for infrastructure to be ready
|
|
echo "Waiting 30 seconds for infrastructure to initialize..."
|
|
sleep 30
|
|
|
|
# Start application services
|
|
docker compose -f compose/production/services.yaml up -d
|
|
|
|
# Wait for services to start
|
|
echo "Waiting 20 seconds for services to start..."
|
|
sleep 20
|
|
|
|
# Start monitoring
|
|
docker compose -f compose/production/monitoring.yaml up -d
|
|
EOF
|
|
|
|
echo -e "${GREEN}✓ Services restarted${NC}"
|
|
|
|
echo ""
|
|
echo -e "${BLUE}Step 6: Verifying deployment${NC}"
|
|
echo "----------------------------"
|
|
|
|
# Check running containers
|
|
ssh ${REMOTE_USER}@${REMOTE_HOST} "docker ps --format 'table {{.Names}}\t{{.Status}}' | grep -E '(apa-vault|apa-minio|apa-postgres|apa-svc-)'"
|
|
|
|
echo ""
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo -e "${GREEN}Rollback Complete${NC}"
|
|
echo -e "${GREEN}========================================${NC}"
|
|
echo ""
|
|
echo -e "${YELLOW}Next Steps:${NC}"
|
|
echo "1. Verify services are running: ./scripts/verify-deployment.sh"
|
|
echo "2. Check application: https://app.harkon.co.uk"
|
|
echo "3. Review logs if needed: ssh ${REMOTE_USER}@${REMOTE_HOST} 'docker logs <container>'"
|
|
echo ""
|