pipeline { agent any environment { DOCKER_IMAGE = 'jassimsm/documentation' DOCKER_TAG = 'latest' REGISTRY_CREDENTIALS = 'docker-credentials' SSH_CREDENTIALS = 'documentation' REMOTE_SERVER = 'ubuntu@160.187.166.47' REMOTE_WORKSPACE = '/home/ubuntu' } stages { stage('Add Host Key') { steps { script { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' mkdir -p ~/.ssh ssh-keyscan -H 160.187.166.47 >> ~/.ssh/known_hosts ''' } } } } stage('Checkout and Install Dependencies on Remote Server') { steps { script { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' ssh ${REMOTE_SERVER} << EOF # Navigate to the workspace or create it if it doesn't exist mkdir -p ${REMOTE_WORKSPACE} cd ${REMOTE_WORKSPACE} rm -rf cicid git clone https://git.tech4biz.wiki/jassim/cicid.git cd cicid git checkout main /usr/bin/yarn install EOF ''' } } } } stage('Build Docker Image') { steps { script { try { docker.build("${DOCKER_IMAGE}:${DOCKER_TAG}") } catch (Exception e) { error "Failed to build Docker image: ${e.message}" } } } } stage('Push Docker Image') { steps { script { try { docker.withRegistry('https://index.docker.io/v1/', REGISTRY_CREDENTIALS) { docker.image("${DOCKER_IMAGE}:${DOCKER_TAG}").push() } } catch (Exception e) { error "Failed to push Docker image: ${e.message}" } } } } stage('Deploy') { steps { script { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' ssh ${REMOTE_SERVER} << EOF cd ${REMOTE_WORKSPACE}/cicid docker pull ${DOCKER_IMAGE}:${DOCKER_TAG} docker stop documentation-container || true docker rm documentation-container || true docker run -d -p 3000:3000 --name documentation-container ${DOCKER_IMAGE}:${DOCKER_TAG} EOF ''' } } } } stage('Update Nginx Configuration') { steps { script { sshagent(credentials: [SSH_CREDENTIALS]) { sh ''' ssh ${REMOTE_SERVER} << EOF sudo nginx -t sudo systemctl reload nginx EOF ''' } } } } } post { always { cleanWs() } failure { mail to: 'jassim.mohammed@tech4biz.io', subject: "Pipeline Failed: ${currentBuild.fullDisplayName}", body: "Pipeline failed. Check the Jenkins console for more details." } } }