spurrin-cleaned-backend-dev/Jenkinsfile
2025-06-12 14:45:50 +05:30

118 lines
5.2 KiB
Groovy

pipeline {
agent any
environment {
SSH_CREDENTIALS = 'hookpilot'
GIT_CREDENTIALS = 'gitea-cred'
REMOTE_SERVER = 'ubuntu@160.187.167.213'
REPO_HTTPS_URL = 'https://git.tech4biz.wiki/rohit/spurrin-cleaned-backend-dev.git'
BRANCH = 'main'
REMOTE_DIR = '/home/ubuntu/spurrin-cleaned-backend-dev'
BACKUP_UPLOADS_DIR = '/home/ubuntu/uploads_backup'
VENV_PYTHON = '../venv/bin/python'
NODE_BIN_PATH = '/home/ubuntu/.nvm/versions/node/v22.15.0/bin'
NOTIFY_EMAIL = 'jassim.mohammed@tech4biz.io'
}
stages {
stage('Add Remote Host Key') {
steps {
echo '🔐 Adding remote host to known_hosts...'
sshagent(credentials: [SSH_CREDENTIALS]) {
sh '''
mkdir -p ~/.ssh
ssh-keyscan -H ${REMOTE_SERVER#*@} >> ~/.ssh/known_hosts
'''
}
}
}
stage('Update Repo on Remote') {
steps {
echo '🔄 Pulling latest code on remote server with conditional restore and fresh backup...'
withCredentials([usernamePassword(credentialsId: "${GIT_CREDENTIALS}", usernameVariable: 'GIT_USER', passwordVariable: 'GIT_PASS')]) {
sshagent(credentials: [SSH_CREDENTIALS]) {
sh """
ssh ${REMOTE_SERVER} '
set -e
echo "🗑️ Removing old backups..."
rm -rf ${BACKUP_UPLOADS_DIR}
mkdir -p ${BACKUP_UPLOADS_DIR}
echo "📦 Backing up existing data..."
[ -d ${REMOTE_DIR}/uploads ] && cp -a ${REMOTE_DIR}/uploads ${BACKUP_UPLOADS_DIR}/
[ -d ${REMOTE_DIR}/hospital_data ] && cp -a ${REMOTE_DIR}/hospital_data ${BACKUP_UPLOADS_DIR}/
[ -f ${REMOTE_DIR}/.env ] && cp ${REMOTE_DIR}/.env ${BACKUP_UPLOADS_DIR}/.env
[ -d ${REMOTE_DIR}/certificates ] && cp -a ${REMOTE_DIR}/certificates ${BACKUP_UPLOADS_DIR}/
if [ -d ${REMOTE_DIR}/.git ]; then
echo "🔁 Repo exists. Pulling latest changes..."
cd ${REMOTE_DIR}
git stash push --include-untracked --message "temp-backup-before-pull" || true
git pull origin ${BRANCH}
git stash pop || true
else
echo "📥 Repo not found. Cloning fresh and restoring backup..."
rm -rf ${REMOTE_DIR}
git clone -b ${BRANCH} https://${GIT_USER}:${GIT_PASS}@git.tech4biz.wiki/rohit/spurrin-cleaned-backend-dev.git ${REMOTE_DIR}
[ -d ${BACKUP_UPLOADS_DIR}/uploads ] && cp -a ${BACKUP_UPLOADS_DIR}/uploads ${REMOTE_DIR}/
[ -d ${BACKUP_UPLOADS_DIR}/hospital_data ] && cp -a ${BACKUP_UPLOADS_DIR}/hospital_data ${REMOTE_DIR}/
[ -f ${BACKUP_UPLOADS_DIR}/.env ] && cp ${BACKUP_UPLOADS_DIR}/.env ${REMOTE_DIR}/.env
[ -d ${BACKUP_UPLOADS_DIR}/certificates ] && cp -a ${BACKUP_UPLOADS_DIR}/certificates ${REMOTE_DIR}/
fi
'
"""
}
}
}
}
stage('Install & Start Services') {
steps {
echo '🚀 Installing and starting services...'
sshagent(credentials: [SSH_CREDENTIALS]) {
sh """
ssh ${REMOTE_SERVER} '
set -e
export PATH=${NODE_BIN_PATH}:\$PATH
cd ${REMOTE_DIR}
npm install --legacy-peer-deps --force
pm2 delete web-server || true
pm2 delete convo || true
pm2 start npm --name web-server -- start
pm2 start chat.py --interpreter ${VENV_PYTHON} --name=convo
'
"""
}
}
}
}
post {
always {
echo '🧹 Cleaning workspace...'
cleanWs()
}
success {
echo '✅ Deployment successful!'
mail to: "${NOTIFY_EMAIL}",
subject: '✅ Jenkins - spurrin-cleaned-node Deployment Successful',
body: "The deployment of spurrin-cleaned-node to ${REMOTE_SERVER} was successful.\n\nRegards,\nJenkins"
}
failure {
echo '❌ Deployment failed!'
mail to: "${NOTIFY_EMAIL}",
subject: '❌ Jenkins - spurrin-cleaned-node Deployment Failed',
body: "The deployment of spurrin-cleaned-node to ${REMOTE_SERVER} failed. Please check Jenkins logs.\n\nRegards,\nJenkins"
}
}
}