Browse Source

ci: update Jenkinsfile with port 2244 and nwhco user

master
nwhco 7 hours ago
parent
commit
c042b9f763
  1. 112
      .dockerignore
  2. 58
      Jenkinsfile
  3. 12
      runner.sh

112
.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

58
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 {

12
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

Loading…
Cancel
Save