pipeline { agent any environment { DOCKER_IMAGE = 'jassimsm/tech4biz-reactjs' DOCKER_TAG = 'latest' DOCKER_USERNAME = "jassimsm" DOCKER_PASSWORD = "dckr_pat_c9HutePXaqreGfKi48H0WPWWfBs" SSH_CREDENTIALS = 'tech4biz-demo' REMOTE_SERVER = 'ubuntu@160.187.167.157' REMOTE_WORKSPACE = '/home/ubuntu' GIT_CREDENTIALS = 'git-cred' } stages { stage('Add Host Key') { steps { script { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' mkdir -p ~/.ssh ssh-keyscan -H 160.187.167.157 >> ~/.ssh/known_hosts ''' } } } } stage('Checkout and Install Dependencies on Remote Server') { steps { script { withCredentials([usernamePassword(credentialsId: GIT_CREDENTIALS, usernameVariable: 'GIT_USERNAME', passwordVariable: 'GIT_PASSWORD')]) { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' ssh ${REMOTE_SERVER} "mkdir -p ${REMOTE_WORKSPACE} && cd ${REMOTE_WORKSPACE} && rm -rf Tech4Biz-Website && \ git clone https://${GIT_USERNAME}:${GIT_PASSWORD}@git.tech4biz.wiki/Tech4Biz-Services/Tech4Biz-Website.git && \ cd Tech4Biz-Website && git checkout main" ''' } } } } } stage('Build Docker Image on Remote Server') { steps { script { try { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' ssh ${REMOTE_SERVER} "cd ${REMOTE_WORKSPACE}/Tech4Biz-Website && docker build -t ${DOCKER_IMAGE}:${DOCKER_TAG} ." ''' } } catch (Exception e) { error "Failed to build Docker image on remote server: ${e.message}" } } } } stage('Push Docker Image from Remote Server') { steps { script { try { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' ssh ${REMOTE_SERVER} "echo ${DOCKER_PASSWORD} | docker login -u ${DOCKER_USERNAME} --password-stdin && docker push ${DOCKER_IMAGE}:${DOCKER_TAG}" ''' } } catch (Exception e) { error "Failed to push Docker image from remote server: ${e.message}" } } } } stage('Deploy') { steps { script { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' ssh ${REMOTE_SERVER} "cd ${REMOTE_WORKSPACE}/Tech4Biz-Website && \ docker pull ${DOCKER_IMAGE}:${DOCKER_TAG} && \ docker stop tech4biz-container || true && \ docker rm tech4biz-container || true && \ docker run -d -p 5173:5173 --name tech4biz-container ${DOCKER_IMAGE}:${DOCKER_TAG}" ''' } } } } stage('Update Nginx Configuration') { steps { script { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' ssh ${REMOTE_SERVER} "sudo nginx -t && sudo systemctl reload nginx" ''' } } } } } post { always { cleanWs() } } }