forked from rohit/spurrin-backend
144 lines
5.5 KiB
Groovy
144 lines
5.5 KiB
Groovy
pipeline {
|
|
agent any
|
|
|
|
environment {
|
|
SSH_CREDENTIALS = 'spurrin-backend-dev'
|
|
GIT_CREDENTIALS = 'gitea-cred'
|
|
REMOTE_SERVER = 'ubuntu@160.187.166.67'
|
|
REPO_HTTPS_URL = 'https://git.tech4biz.wiki/Tech4Biz-Services/spurrin-cleaned-node.git'
|
|
BRANCH = 'dev'
|
|
|
|
REMOTE_DIR = '/home/ubuntu/spurrin-cleaned-node'
|
|
BACKUP_UPLOADS_DIR = '/home/ubuntu/uploads_backup'
|
|
VENV_PYTHON = '../venv/bin/python'
|
|
|
|
NODE_BIN_PATH = '/home/ubuntu/.nvm/versions/node/v22.12.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
|
|
|
|
# Clean old backup folder
|
|
echo "🗑️ Removing old backups..."
|
|
rm -rf ${BACKUP_UPLOADS_DIR}
|
|
mkdir -p ${BACKUP_UPLOADS_DIR}
|
|
|
|
echo "📦 Backing up existing data..."
|
|
if [ -d ${REMOTE_DIR}/uploads ]; then
|
|
cp -a ${REMOTE_DIR}/uploads ${BACKUP_UPLOADS_DIR}/
|
|
fi
|
|
|
|
if [ -d ${REMOTE_DIR}/hospital_data ]; then
|
|
cp -a ${REMOTE_DIR}/hospital_data ${BACKUP_UPLOADS_DIR}/
|
|
fi
|
|
|
|
if [ -f ${REMOTE_DIR}/.env ]; then
|
|
cp ${REMOTE_DIR}/.env ${BACKUP_UPLOADS_DIR}/.env
|
|
fi
|
|
|
|
if [ -d ${REMOTE_DIR}/certificates ]; then
|
|
cp -a ${REMOTE_DIR}/certificates ${BACKUP_UPLOADS_DIR}/
|
|
fi
|
|
|
|
# Pull or clone repo
|
|
if [ -d ${REMOTE_DIR}/.git ]; then
|
|
echo "🔁 Repo exists. Pulling latest changes..."
|
|
cd ${REMOTE_DIR}
|
|
git reset --hard
|
|
git clean -fd
|
|
git pull origin ${BRANCH}
|
|
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/Tech4Biz-Services/spurrin-cleaned-node.git ${REMOTE_DIR}
|
|
|
|
# Restore backup only on fresh clone
|
|
if [ -d ${BACKUP_UPLOADS_DIR}/uploads ]; then
|
|
cp -a ${BACKUP_UPLOADS_DIR}/uploads ${REMOTE_DIR}/
|
|
fi
|
|
|
|
if [ -d ${BACKUP_UPLOADS_DIR}/hospital_data ]; then
|
|
cp -a ${BACKUP_UPLOADS_DIR}/hospital_data ${REMOTE_DIR}/
|
|
fi
|
|
|
|
if [ -f ${BACKUP_UPLOADS_DIR}/.env ]; then
|
|
cp ${BACKUP_UPLOADS_DIR}/.env ${REMOTE_DIR}/.env
|
|
fi
|
|
|
|
if [ -d ${BACKUP_UPLOADS_DIR}/certificates ]; then
|
|
cp -a ${BACKUP_UPLOADS_DIR}/certificates ${REMOTE_DIR}/
|
|
fi
|
|
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"
|
|
}
|
|
}
|
|
} |