126 lines
4.2 KiB
Bash
126 lines
4.2 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Build All Services Script for Bakery-IA
|
||
|
|
# This script builds and pushes all service images to the Gitea registry
|
||
|
|
# Used for first-time deployment when CI/CD pipeline isn't available yet
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Bakery-IA Services Build Script"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Check if we're in the correct directory
|
||
|
|
if [ ! -f "PRODUCTION_DEPLOYMENT_GUIDE.md" ]; then
|
||
|
|
echo "Error: This script must be run from the root of the bakery-ia repository"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Get Gitea admin password
|
||
|
|
echo "Getting Gitea admin credentials..."
|
||
|
|
if ! GITEA_ADMIN_PASSWORD=$(kubectl get secret gitea-admin-secret -n gitea -o jsonpath='{.data.password}' | base64 -d 2>/dev/null); then
|
||
|
|
echo "Error: Could not get Gitea admin password"
|
||
|
|
echo "Make sure you've completed Phase 5 (CI/CD Infrastructure) first"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Login to Gitea registry
|
||
|
|
echo "Logging in to Gitea registry..."
|
||
|
|
docker login gitea-http.gitea.svc.cluster.local:3000 -u bakery-admin -p "$GITEA_ADMIN_PASSWORD"
|
||
|
|
|
||
|
|
# Define the registry URL
|
||
|
|
REGISTRY="gitea-http.gitea.svc.cluster.local:3000/bakery-admin"
|
||
|
|
|
||
|
|
# Define all services to build
|
||
|
|
# Format: "directory_name:image_name"
|
||
|
|
# Note: directory names use underscores (e.g., alert_processor), image names use hyphens (e.g., alert-processor)
|
||
|
|
SERVICES=(
|
||
|
|
"gateway:gateway"
|
||
|
|
"frontend:dashboard"
|
||
|
|
"auth:auth-service"
|
||
|
|
"tenant:tenant-service"
|
||
|
|
"training:training-service"
|
||
|
|
"forecasting:forecasting-service"
|
||
|
|
"sales:sales-service"
|
||
|
|
"external:external-service"
|
||
|
|
"notification:notification-service"
|
||
|
|
"inventory:inventory-service"
|
||
|
|
"recipes:recipes-service"
|
||
|
|
"suppliers:suppliers-service"
|
||
|
|
"pos:pos-service"
|
||
|
|
"orders:orders-service"
|
||
|
|
"production:production-service"
|
||
|
|
"procurement:procurement-service"
|
||
|
|
"distribution:distribution-service"
|
||
|
|
"orchestrator:orchestrator-service"
|
||
|
|
"alert_processor:alert-processor"
|
||
|
|
"ai_insights:ai-insights-service"
|
||
|
|
"demo_session:demo-session-service"
|
||
|
|
)
|
||
|
|
|
||
|
|
# Build each service
|
||
|
|
echo ""
|
||
|
|
echo "Starting build process..."
|
||
|
|
echo "This may take 15-30 minutes depending on your system."
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
FAILED_SERVICES=()
|
||
|
|
SUCCESS_COUNT=0
|
||
|
|
|
||
|
|
for service_def in "${SERVICES[@]}"; do
|
||
|
|
IFS=':' read -r service_name image_name <<< "$service_def"
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Building: $service_name -> $image_name"
|
||
|
|
echo "=========================================="
|
||
|
|
|
||
|
|
if [ "$service_name" = "gateway" ]; then
|
||
|
|
# Gateway service
|
||
|
|
docker build -t "$REGISTRY/$image_name:latest" \
|
||
|
|
--build-arg BASE_REGISTRY="$REGISTRY" \
|
||
|
|
--build-arg PYTHON_IMAGE="python:3.11-slim" \
|
||
|
|
-f "gateway/Dockerfile" .
|
||
|
|
elif [ "$service_name" = "frontend" ]; then
|
||
|
|
# Frontend service (uses node:18-alpine and nginx:1.25-alpine internally)
|
||
|
|
docker build -t "$REGISTRY/$image_name:latest" \
|
||
|
|
-f "frontend/Dockerfile.kubernetes" frontend/
|
||
|
|
else
|
||
|
|
# Microservices (in services/ directory)
|
||
|
|
docker build -t "$REGISTRY/$image_name:latest" \
|
||
|
|
--build-arg BASE_REGISTRY="$REGISTRY" \
|
||
|
|
--build-arg PYTHON_IMAGE="python:3.11-slim" \
|
||
|
|
-f "services/$service_name/Dockerfile" .
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Push the image
|
||
|
|
echo "Pushing $image_name to registry..."
|
||
|
|
if docker push "$REGISTRY/$image_name:latest"; then
|
||
|
|
echo "✅ Successfully built and pushed $image_name"
|
||
|
|
SUCCESS_COUNT=$((SUCCESS_COUNT + 1))
|
||
|
|
else
|
||
|
|
echo "❌ Failed to push $image_name"
|
||
|
|
FAILED_SERVICES+=("$image_name")
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
done
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Build Summary"
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Total services: ${#SERVICES[@]}"
|
||
|
|
echo "Successfully built and pushed: $SUCCESS_COUNT"
|
||
|
|
|
||
|
|
if [ ${#FAILED_SERVICES[@]} -gt 0 ]; then
|
||
|
|
echo "Failed services: ${#FAILED_SERVICES[@]}"
|
||
|
|
echo "Failed list: ${FAILED_SERVICES[*]}"
|
||
|
|
echo ""
|
||
|
|
echo "⚠️ Some services failed to build/push"
|
||
|
|
exit 1
|
||
|
|
else
|
||
|
|
echo "✅ All services built and pushed successfully!"
|
||
|
|
echo ""
|
||
|
|
echo "You can now proceed to Phase 6: Deploy Application Services"
|
||
|
|
echo "Run: kubectl apply -k infrastructure/environments/prod/k8s-manifests"
|
||
|
|
fi
|