113 lines
4.0 KiB
Groovy
113 lines
4.0 KiB
Groovy
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()
|
|
}
|
|
}
|
|
}
|