From c042b9f763d5cc1edf0ddb9b98bcbea777412b0a Mon Sep 17 00:00:00 2001 From: nwhco Date: Tue, 25 Aug 2026 15:56:39 +0000 Subject: [PATCH] ci: update Jenkinsfile with port 2244 and nwhco user --- .dockerignore | 112 +++++++++++++++++++++++++------------------------- Jenkinsfile | 58 +++++++++++++++----------- runner.sh | 12 ++++++ 3 files changed, 101 insertions(+), 81 deletions(-) diff --git a/.dockerignore b/.dockerignore index eddd6ca..0c01515 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,88 +1,86 @@ -# Git +# Version control .git .gitignore .gitattributes -# Python +# Python cache & bytecode __pycache__ *.py[cod] -*$py.class +*.class *.so .Python *.egg-info -dist/ -build/ +dist +build *.egg -# Virtual environments -venv/ -env/ -ENV/ +# Virtual environments & node_modules +venv +env +ENV +env.bak +venv.bak .venv +node_modules -# IDEs -.vscode/ -.idea/ +# IDE & OS +.vscode +.idea *.swp *.swo *~ - -# OS .DS_Store Thumbs.db -# Docker +# Docker files docker-compose*.yml Dockerfile* .dockerignore -# Development files +# Environment files +.env .env.dev +.env.development +.env.local +.env.test + +# Logs & database dumps *.log -logs/ +logs *.sqlite3 +*.sql +*.tar.gz +*.zip +*.bak -# Documentation -*.md -docs/ -ADMIN_*.md -CONFIG_*.md -FINAL_*.md -FIX_*.md -MEDIA_*.md -OPTIMIZATION_*.md -PODCAST_*.md -QUICK_*.md -README*.md -VIDEO_*.md -BUGFIX_*.md -CHANGELOG_*.md -COLOR_*.md - -# Test files +# Testing & linting +.pytest_cache +.coverage +htmlcov +.tox +.nox +.mypy_cache +.dmypy.json +dmypy.json test_*.py -test_*.sh -tests/ -.pytest_cache/ +tests -# Volumes -volumes/ -staticfiles/ -media/ - -# Scripts -scripts/ -# seeds/ - -# Config -nginx*.conf +# Documentation & CI +*.md +docs Jenkinsfile -.letta/ -.claude/ -.qodo/ -.zencoder/ +.jenkins +.letta +.claude +.qodo +.zencoder + +# Large volumes & temporary uploads +volumes +staticfiles +media +media_volume +recordings +data/*.xlsx +data/*.csv -# Misc -*.xmind -*.html -sshs diff --git a/Jenkinsfile b/Jenkinsfile index 813c39a..591d97e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,6 +1,7 @@ pipeline { environment { production_server_ip = "46.173.16.83" + production_server_port = "2244" production_server_name = "4e1f741c-3f7a-407d-904e-6778ec6e6219" project_path = "/projects/dovodi/dovodi-backend" gitBranch = "origin/master" @@ -12,14 +13,16 @@ pipeline { steps { script { withCredentials([usernamePassword(credentialsId: production_server_name, usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) { - sh """ - sshpass -p \$PASSWORD ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 \$USERNAME@${production_server_ip} " - cd ${project_path} && \ - chmod +x ./runner.sh 2>/dev/null || true && \ - rm -f /tmp/dovodi_backend_deploy_status.txt /tmp/dovodi_backend_runner_deploy.log && \ - (nohup bash ./runner.sh > /tmp/dovodi_backend_runner_deploy.log 2>&1 &) - " - """ + retry(3) { + sh """ + sshpass -p \$PASSWORD ssh -p ${production_server_port} -o StrictHostKeyChecking=no -o ConnectTimeout=15 -o ServerAliveInterval=15 \$USERNAME@${production_server_ip} " + cd ${project_path} && \ + chmod +x ./runner.sh 2>/dev/null || true && \ + rm -f /tmp/dovodi_backend_deploy_status.txt /tmp/dovodi_backend_runner_deploy.log && \ + (nohup bash ./runner.sh > /tmp/dovodi_backend_runner_deploy.log 2>&1 &) + " + """ + } } } } @@ -31,21 +34,28 @@ pipeline { 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() + def output = "" + try { + output = sh( + script: """ + sshpass -p \$PASSWORD ssh -p ${production_server_port} -o StrictHostKeyChecking=no -o ConnectTimeout=15 -o ServerAliveInterval=15 \$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() + } catch (Exception e) { + echo "⚠️ Temporary SSH network timeout / glitch. Retrying in 10s..." + sleep 10 + return false + } if (output.contains("DEPLOY_STATE_SUCCESS")) { echo "==========================================" @@ -56,7 +66,7 @@ pipeline { 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'" + sh "sshpass -p \$PASSWORD ssh -p ${production_server_port} -o StrictHostKeyChecking=no \$USERNAME@${production_server_ip} 'cat /tmp/dovodi_backend_runner_deploy.log'" error("Dovodi Backend build failed on server.") return true } else { diff --git a/runner.sh b/runner.sh index ab3b7e5..fb60c5d 100755 --- a/runner.sh +++ b/runner.sh @@ -11,6 +11,18 @@ else # در صورت بروز هرگونه خطا، وضعیت FAIL ثبت شود trap 'echo "FAIL" > /tmp/dovodi_backend_deploy_status.txt' ERR + # ۱. بستن تمام رانرهای قبلی همین پروژه به جز پروسه جاری + CURRENT_PID=$$ + for pid in $(pgrep -f "dovodi-backend/runner.sh" 2>/dev/null || true); do + if [ "$pid" != "$CURRENT_PID" ]; then + kill -9 "$pid" 2>/dev/null || true + fi + done + + # ۲. بستن پروسه‌های فرزند داکر و بیلدکس معلق که ممکن است قفل داکر را نگه داشته باشند + pkill -9 -f "docker-buildx.*dovodi-backend" 2>/dev/null || true + pkill -9 -f "docker.*dovodi-backend" 2>/dev/null || true + echo "🧹 [1/4] Pre-build cleanup: freeing up disk space safely..." # ۱. پاکسازی کامل تمام کش‌های بیلد داکر بدون دست زدن به کانتینرهای فعال docker builder prune -a -f 2>/dev/null || true