Browse Source

build enhancement with avoidind abortion and clearing cache

master
Mohsen Taba 1 week ago
parent
commit
57803d0e40
  1. 82
      Jenkinsfile
  2. 30
      runner.sh

82
Jenkinsfile

@ -7,45 +7,73 @@ pipeline {
}
agent any
stages {
stage('🚀 Deploy Dovodi Backend (Background Build)') {
stage('🚀 Trigger Deployment') {
when { expression { gitBranch == "origin/master" } }
steps {
script {
withCredentials([usernamePassword(credentialsId: production_server_name, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
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
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
STATUS=\$(cat /tmp/dovodi_backend_deploy_status.txt)
if [ "\$STATUS" = "SUCCESS" ]; then
echo "✅ Deployment completed successfully!"
break
RAW=\$(cat /tmp/dovodi_backend_deploy_status.txt | tr -d "\\r\\n")
echo "DEPLOY_STATE_\${RAW}"
else
echo "❌ ERROR: Deployment failed! Last 20 lines of log:"
tail -n 20 /tmp/dovodi_backend_runner_deploy.log
exit 1
fi
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
done
EOF
"""
return false
}
}
}
}
}
}
}
}
}

30
runner.sh

@ -1,4 +1,5 @@
#!/bin/bash
set -e
# Check if the '--dev' argument is provided
if [ "$1" == "--dev" ]; then
@ -7,12 +8,31 @@ if [ "$1" == "--dev" ]; then
else
echo "Run Production docker"
# 👇 VITAL CHANGES HERE:
# 1. Ensure we are on the master branch
git checkout master
# در صورت بروز هرگونه خطا، وضعیت FAIL ثبت شود
trap 'echo "FAIL" > /tmp/dovodi_backend_deploy_status.txt' ERR
echo "🧹 [1/4] Pre-build cleanup: freeing up disk space safely..."
# ۱. پاکسازی کامل تمام کش‌های بیلد داکر بدون دست زدن به کانتینرهای فعال
docker builder prune -a -f 2>/dev/null || true
# 2. Pull the latest changes from master (NOT develop)
git pull origin master
# ۲. پاکسازی ایمیج‌های قدیمی و معلق (Dangling)
docker image prune -f 2>/dev/null || true
# ۳. پاکسازی کش پکیج‌های سیستم‌عامل
apt-get clean 2>/dev/null || true
echo "📥 [2/4] Pulling latest backend changes from master..."
git checkout master
git fetch origin
git reset --hard origin/master
echo "🚀 [3/4] Building and deploying backend container..."
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker compose -f docker-compose.prod.yml up -d --build
echo "✨ [4/4] Post-build cleanup..."
# پاکسازی ایمیج قدیمی که بعد از بیلد جدید معلق شده است
docker image prune -f 2>/dev/null || true
echo "SUCCESS" > /tmp/dovodi_backend_deploy_status.txt
echo "🎉 Dovodi Backend build and deployment finished successfully!"
fi
Loading…
Cancel
Save