Files
CloudOps/platform/Jenkinsfile

84 lines
3.0 KiB
Groovy

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 '''
# Copy modules to a Jenkins-owned path (no root needed)
mkdir -p /var/jenkins_home/management-platform/modules
cp -f ./platform/modules/*.py /var/jenkins_home/management-platform/modules/
echo "✅ Synced modules → /var/jenkins_home/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 /var/jenkins_home/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
STATUS=$(curl -s -o /dev/null -w "%{http_code}" -L http://localhost:8088/)
if [ "$STATUS" = "200" ] || [ "$STATUS" = "302" ]; then
echo "✅ Platform responding on :8088 (HTTP $STATUS)"
else
echo "❌ Health check failed — got HTTP $STATUS"
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'
}
}
}