pipeline { agent any stages { stage('Checkout') { steps { echo '✅ Code checked out from gitea' } } stage('Build Docker Image') { steps { sh ''' docker build -t management-platform:latest ./platform/ echo "✅ Docker image built" docker images management-platform:latest --format "Size: {{.Size}}" ''' } } stage('Deploy to Server 1') { steps { sh ''' # Sync Python modules to host path — docker run mounts this OVER the image # (new app.py in the image imports modules.sites etc.; host must stay in sync) mkdir -p /root/management-platform/modules cp -f ./platform/modules/*.py /root/management-platform/modules/ echo "✅ Synced platform/modules → /root/management-platform/modules" docker stop management-platform 2>/dev/null || true docker rm management-platform 2>/dev/null || true docker run -d \ --name management-platform \ --restart unless-stopped \ -p 8088:5000 \ -e HOSTNAME=vmi3024229 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /root:/root \ -v /etc/passwd:/etc/passwd:ro \ -v /etc/shadow:/etc/shadow:ro \ -v /root/management-platform/config.py:/app/config.py:ro \ -v /root/management-platform/modules:/app/modules:ro \ management-platform:latest sleep 5 if docker ps | grep -q management-platform; then echo "✅ Deployed successfully" else echo "❌ Container failed to start" docker logs management-platform --tail=20 exit 1 fi ''' } } stage('Health Check') { steps { sh ''' sleep 3 # /login is public; / redirects and may not satisfy curl -f in all setups if curl -sf http://localhost:8088/login 2>/dev/null; then echo "✅ Platform responding on :8088" else echo "❌ Health check failed — container logs:" docker logs management-platform --tail=40 2>/dev/null || true exit 1 fi ''' } } } post { success { echo '✅ Pipeline succeeded — platform deployed' } failure { echo '❌ Pipeline failed — check logs' sh 'docker logs management-platform --tail=30 2>/dev/null || true' } } }