|
|
@ -7,45 +7,73 @@ pipeline { |
|
|
} |
|
|
} |
|
|
agent any |
|
|
agent any |
|
|
stages { |
|
|
stages { |
|
|
stage('🚀 Deploy Dovodi Backend (Background Build)') { |
|
|
|
|
|
|
|
|
stage('🚀 Trigger Deployment') { |
|
|
when { expression { gitBranch == "origin/master" } } |
|
|
when { expression { gitBranch == "origin/master" } } |
|
|
steps { |
|
|
steps { |
|
|
script { |
|
|
script { |
|
|
withCredentials([usernamePassword(credentialsId: production_server_name, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { |
|
|
withCredentials([usernamePassword(credentialsId: production_server_name, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { |
|
|
sh """ |
|
|
sh """ |
|
|
sshpass -p \$PASSWORD ssh -o StrictHostKeyChecking=no -o ServerAliveInterval=30 -o ServerAliveCountMax=120 \$USERNAME@${production_server_ip} << 'EOF' |
|
|
|
|
|
|
|
|
|
|
|
cd ${project_path} |
|
|
|
|
|
|
|
|
|
|
|
echo "⏳ Starting runner.sh in background to prevent timeout..." |
|
|
|
|
|
|
|
|
|
|
|
rm -f /tmp/dovodi_backend_deploy_status.txt |
|
|
|
|
|
rm -f /tmp/dovodi_backend_runner_deploy.log |
|
|
|
|
|
|
|
|
|
|
|
nohup bash -c './runner.sh && echo "SUCCESS" > /tmp/dovodi_backend_deploy_status.txt || echo "FAIL" > /tmp/dovodi_backend_deploy_status.txt' > /tmp/dovodi_backend_runner_deploy.log 2>&1 & |
|
|
|
|
|
|
|
|
|
|
|
echo "⏳ Process is running. Waiting for build and deploy to finish..." |
|
|
|
|
|
|
|
|
|
|
|
while true; do |
|
|
|
|
|
if [ -f /tmp/dovodi_backend_deploy_status.txt ]; then |
|
|
|
|
|
STATUS=\$(cat /tmp/dovodi_backend_deploy_status.txt) |
|
|
|
|
|
if [ "\$STATUS" = "SUCCESS" ]; then |
|
|
|
|
|
echo "✅ Deployment completed successfully!" |
|
|
|
|
|
break |
|
|
|
|
|
else |
|
|
|
|
|
echo "❌ ERROR: Deployment failed! Last 20 lines of log:" |
|
|
|
|
|
tail -n 20 /tmp/dovodi_backend_runner_deploy.log |
|
|
|
|
|
exit 1 |
|
|
|
|
|
fi |
|
|
|
|
|
fi |
|
|
|
|
|
sleep 10 |
|
|
|
|
|
done |
|
|
|
|
|
EOF |
|
|
|
|
|
|
|
|
sshpass -p \$PASSWORD ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 \$USERNAME@${production_server_ip} " |
|
|
|
|
|
cd ${project_path} && \ |
|
|
|
|
|
rm -f /tmp/dovodi_backend_deploy_status.txt /tmp/dovodi_backend_runner_deploy.log && \ |
|
|
|
|
|
(nohup ./runner.sh > /tmp/dovodi_backend_runner_deploy.log 2>&1 &) |
|
|
|
|
|
" |
|
|
""" |
|
|
""" |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
stage('⏳ Live Build & Deploy Monitor') { |
|
|
|
|
|
when { expression { gitBranch == "origin/master" } } |
|
|
|
|
|
steps { |
|
|
|
|
|
timeout(time: 15, unit: 'MINUTES') { |
|
|
|
|
|
script { |
|
|
|
|
|
withCredentials([usernamePassword(credentialsId: production_server_name, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { |
|
|
|
|
|
waitUntil { |
|
|
|
|
|
def output = sh( |
|
|
|
|
|
script: """ |
|
|
|
|
|
sshpass -p \$PASSWORD ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 \$USERNAME@${production_server_ip} ' |
|
|
|
|
|
if [ -f /tmp/dovodi_backend_deploy_status.txt ]; then |
|
|
|
|
|
RAW=\$(cat /tmp/dovodi_backend_deploy_status.txt | tr -d "\\r\\n") |
|
|
|
|
|
echo "DEPLOY_STATE_\${RAW}" |
|
|
|
|
|
else |
|
|
|
|
|
echo "DEPLOY_STATE_PENDING" |
|
|
|
|
|
fi |
|
|
|
|
|
echo "===LOG_TAIL===" |
|
|
|
|
|
tail -n 6 /tmp/dovodi_backend_runner_deploy.log 2>/dev/null || true |
|
|
|
|
|
' |
|
|
|
|
|
""", |
|
|
|
|
|
returnStdout: true |
|
|
|
|
|
).trim() |
|
|
|
|
|
|
|
|
|
|
|
if (output.contains("DEPLOY_STATE_SUCCESS")) { |
|
|
|
|
|
echo "==========================================" |
|
|
|
|
|
echo "✅ Dovodi Backend deployment completed successfully!" |
|
|
|
|
|
echo "==========================================" |
|
|
|
|
|
return true |
|
|
|
|
|
} else if (output.contains("DEPLOY_STATE_FAIL")) { |
|
|
|
|
|
echo "==========================================" |
|
|
|
|
|
echo "❌ ERROR: Dovodi Backend deployment failed! Full log:" |
|
|
|
|
|
echo "==========================================" |
|
|
|
|
|
sh "sshpass -p \$PASSWORD ssh -o StrictHostKeyChecking=no \$USERNAME@${production_server_ip} 'cat /tmp/dovodi_backend_runner_deploy.log'" |
|
|
|
|
|
error("Dovodi Backend build failed on server.") |
|
|
|
|
|
return true |
|
|
|
|
|
} else { |
|
|
|
|
|
if (output.contains("===LOG_TAIL===")) { |
|
|
|
|
|
def parts = output.split("===LOG_TAIL===") |
|
|
|
|
|
if (parts.length > 1 && parts[1].trim()) { |
|
|
|
|
|
echo "--- 📋 Live Progress ---" |
|
|
|
|
|
echo parts[1].trim() |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
sleep 10 |
|
|
|
|
|
return false |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|