AI-Voice-Agent/Tech4biz-Version01/Tech4biz/Jenkinsfile
2025-05-22 18:25:15 +05:30

104 lines
3.6 KiB
Groovy

pipeline {
agent any
environment {
SSH_CREDENTIALS = 'tech4biz-web'
GIT_CREDENTIALS = 'gitea-cred'
REPO_URL = 'https://git.tech4biz.wiki/Tech4Biz-Services/Tech4Biz-Website-Containerized.git'
BRANCH = 'main'
REMOTE_SERVER = 'ubuntu@160.187.167.14'
REMOTE_DIR = '/home/ubuntu/tech4biz-website'
IMAGE_NAME = 'tech4biz-web'
CONTAINER_NAME = 'tech4biz-web'
APP_PORT = '5173'
NOTIFY_EMAIL = 'devops@tech4biz.wiki'
}
options {
disableConcurrentBuilds()
}
stages {
stage('Add Remote Host Key') {
steps {
echo "🔑 Adding remote host key to known_hosts..."
sshagent(credentials: [SSH_CREDENTIALS]) {
sh '''
mkdir -p ~/.ssh
ssh-keyscan -H 160.187.167.14 >> ~/.ssh/known_hosts
'''
}
}
}
stage('Checkout Code from Gitea') {
steps {
echo "📦 Cloning repository from Gitea..."
git credentialsId: "${GIT_CREDENTIALS}", url: "${REPO_URL}", branch: "${BRANCH}"
}
}
stage('Deploy and Build Docker Image') {
steps {
echo "🚢 Sending code to remote and building Docker image..."
sshagent(credentials: [SSH_CREDENTIALS]) {
sh '''
ssh ${REMOTE_SERVER} "sudo mkdir -p ${REMOTE_DIR} && sudo chown -R ubuntu:ubuntu ${REMOTE_DIR}"
# Exclude .git directory to prevent file not found errors
rsync -avz --delete --exclude='.git' ./ ${REMOTE_SERVER}:${REMOTE_DIR}/
ssh ${REMOTE_SERVER} "cd ${REMOTE_DIR} && docker build -t ${IMAGE_NAME} ."
'''
}
}
}
stage('Run Docker Container') {
steps {
echo "🐳 Running Docker container on remote server..."
sshagent(credentials: [SSH_CREDENTIALS]) {
sh '''
ssh ${REMOTE_SERVER} "docker rm -f ${CONTAINER_NAME} || true && \
docker run -d -p ${APP_PORT}:${APP_PORT} --name ${CONTAINER_NAME} ${IMAGE_NAME} && \
docker update --restart=always ${CONTAINER_NAME}"
'''
}
}
}
stage('Reload Nginx') {
steps {
echo "🌐 Reloading Nginx on remote server..."
sshagent(credentials: [SSH_CREDENTIALS]) {
sh '''
ssh ${REMOTE_SERVER} "sudo nginx -t && sudo systemctl reload nginx"
'''
}
}
}
}
post {
success {
echo "✅ Deployment succeeded. Sending notification email..."
mail to: "${NOTIFY_EMAIL}",
subject: "✅ Jenkins Job Success: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
body: "Good news!\n\nThe Jenkins job ${env.JOB_NAME} #${env.BUILD_NUMBER} completed successfully.\n\n- Jenkins"
}
failure {
echo "❌ Deployment failed. Sending notification email..."
mail to: "${NOTIFY_EMAIL}",
subject: "❌ Jenkins Job Failed: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
body: "The Jenkins job ${env.JOB_NAME} #${env.BUILD_NUMBER} has failed.\nPlease check the Jenkins console output for more details.\n\n- Jenkins"
}
always {
echo "🧹 Cleaning workspace..."
cleanWs()
}
}
}