213 lines
5.5 KiB
Bash
213 lines
5.5 KiB
Bash
#!/bin/bash
|
|
|
|
# Lions Dev Client Deployment Script
|
|
# This script deploys the Lions Dev application using lionsctl pipeline
|
|
|
|
set -euo pipefail
|
|
|
|
# Configuration
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
LIONSCTL_PATH="${SCRIPT_DIR}/../lions-infrastructure-2025/lionsctl/lionsctl.exe"
|
|
REPO_URL="https://git.lions.dev/lionsctl-bot/lionsctl-deployments"
|
|
BRANCH="main"
|
|
JAVA_VERSION=17
|
|
NOTIFICATION_EMAIL="gbanedahoud@gmail.com"
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Logging functions
|
|
log_info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_success() {
|
|
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
|
}
|
|
|
|
log_warning() {
|
|
echo -e "${YELLOW}[WARNING]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Help function
|
|
show_help() {
|
|
cat << EOF
|
|
Lions Dev Client Deployment Script
|
|
|
|
Usage: $0 [OPTIONS]
|
|
|
|
OPTIONS:
|
|
-e, --environment Target environment (dev|staging|production) [default: production]
|
|
-c, --cluster Target cluster (k1|k2) [default: k2 for production, k1 for dev/staging]
|
|
-b, --branch Git branch to deploy [default: main]
|
|
-m, --email Notification email [default: gbanedahoud@gmail.com]
|
|
-j, --java-version Java version to use [default: 17]
|
|
-h, --help Show this help message
|
|
|
|
EXAMPLES:
|
|
# Deploy to production (default)
|
|
$0
|
|
|
|
# Deploy to staging
|
|
$0 --environment staging
|
|
|
|
# Deploy to development
|
|
$0 --environment dev --cluster k1
|
|
|
|
# Deploy specific branch to production
|
|
$0 --branch feature/new-design --environment production
|
|
|
|
ENVIRONMENTS:
|
|
- dev: Development environment on k1 cluster (dev.lions.dev)
|
|
- staging: Staging environment on k1 cluster (staging.lions.dev)
|
|
- production: Production environment on k2 cluster (lions.dev)
|
|
|
|
EOF
|
|
}
|
|
|
|
# Parse command line arguments
|
|
ENVIRONMENT="production"
|
|
CLUSTER=""
|
|
EMAIL="$NOTIFICATION_EMAIL"
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case $1 in
|
|
-e|--environment)
|
|
ENVIRONMENT="$2"
|
|
shift 2
|
|
;;
|
|
-c|--cluster)
|
|
CLUSTER="$2"
|
|
shift 2
|
|
;;
|
|
-b|--branch)
|
|
BRANCH="$2"
|
|
shift 2
|
|
;;
|
|
-m|--email)
|
|
EMAIL="$2"
|
|
shift 2
|
|
;;
|
|
-j|--java-version)
|
|
JAVA_VERSION="$2"
|
|
shift 2
|
|
;;
|
|
-h|--help)
|
|
show_help
|
|
exit 0
|
|
;;
|
|
*)
|
|
log_error "Unknown option: $1"
|
|
show_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Set default cluster based on environment if not specified
|
|
if [[ -z "$CLUSTER" ]]; then
|
|
case $ENVIRONMENT in
|
|
production)
|
|
CLUSTER="k2"
|
|
;;
|
|
dev|staging)
|
|
CLUSTER="k1"
|
|
;;
|
|
*)
|
|
log_error "Invalid environment: $ENVIRONMENT. Must be dev, staging, or production."
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
# Validate inputs
|
|
if [[ ! "$ENVIRONMENT" =~ ^(dev|staging|production)$ ]]; then
|
|
log_error "Invalid environment: $ENVIRONMENT. Must be dev, staging, or production."
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! "$CLUSTER" =~ ^(k1|k2)$ ]]; then
|
|
log_error "Invalid cluster: $CLUSTER. Must be k1 or k2."
|
|
exit 1
|
|
fi
|
|
|
|
# Check if lionsctl exists
|
|
if [[ ! -f "$LIONSCTL_PATH" ]]; then
|
|
log_error "lionsctl not found at: $LIONSCTL_PATH"
|
|
log_info "Please build lionsctl first:"
|
|
log_info " cd ../lions-infrastructure-2025/lionsctl && go build -o lionsctl.exe"
|
|
exit 1
|
|
fi
|
|
|
|
# Display deployment information
|
|
log_info "🚀 Lions Dev Client Deployment"
|
|
log_info "================================"
|
|
log_info "Repository: $REPO_URL"
|
|
log_info "Branch: $BRANCH"
|
|
log_info "Environment: $ENVIRONMENT"
|
|
log_info "Cluster: $CLUSTER"
|
|
log_info "Java Version: $JAVA_VERSION"
|
|
log_info "Email: $EMAIL"
|
|
log_info "================================"
|
|
|
|
# Confirm deployment
|
|
if [[ "$ENVIRONMENT" == "production" ]]; then
|
|
log_warning "⚠️ You are about to deploy to PRODUCTION!"
|
|
log_warning "This will affect the live Lions Dev website at https://lions.dev"
|
|
read -p "Are you sure you want to continue? (y/N): " -n 1 -r
|
|
echo
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
log_info "Deployment cancelled."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# Execute deployment
|
|
log_info "🔄 Starting deployment..."
|
|
|
|
"$LIONSCTL_PATH" pipeline \
|
|
--url "$REPO_URL" \
|
|
--branch "$BRANCH" \
|
|
--java-version "$JAVA_VERSION" \
|
|
--environment "$ENVIRONMENT" \
|
|
--cluster "$CLUSTER" \
|
|
--mail "$EMAIL" \
|
|
--verbose
|
|
|
|
DEPLOYMENT_STATUS=$?
|
|
|
|
if [[ $DEPLOYMENT_STATUS -eq 0 ]]; then
|
|
log_success "🎉 Deployment completed successfully!"
|
|
|
|
case $ENVIRONMENT in
|
|
production)
|
|
log_success "✅ Lions Dev is now live at: https://lions.dev"
|
|
;;
|
|
staging)
|
|
log_success "✅ Staging environment is available at: https://staging.lions.dev"
|
|
;;
|
|
dev)
|
|
log_success "✅ Development environment is available at: https://dev.lions.dev"
|
|
;;
|
|
esac
|
|
|
|
log_info "📊 You can monitor the deployment at:"
|
|
log_info " - Kubernetes Dashboard: https://k8s.lions.dev"
|
|
log_info " - Grafana Monitoring: https://grafana.lions.dev"
|
|
log_info " - Application Logs: kubectl logs -n lions-apps -l app=lionsdev-client"
|
|
|
|
else
|
|
log_error "❌ Deployment failed with exit code: $DEPLOYMENT_STATUS"
|
|
log_info "🔍 Check the logs above for error details"
|
|
log_info "📧 A notification email has been sent to: $EMAIL"
|
|
exit $DEPLOYMENT_STATUS
|
|
fi
|