def dockerImage pipeline { agent { docker { image 'cicd/ubuntu:22.04-docker-py312-jdk8-nodejs20-mvn389' args '-u root:root -v /var/run/docker.sock:/var/run/docker.sock' } } environment { GIT_REPO = 'https://wdxz-gitea.best-envision.com/qiaoxinjiu/effekt-interface.git' GIT_CREDENTIALS_ID = 'ebe42f70-146f-4a4b-8090-eded24a77173' HARBOR_URL = '39.170.26.156:8443' HARBOR_PROJECT = 'effekt' IMAGE_NAME = 'effekt-interface' IMAGE = "${HARBOR_URL}/${HARBOR_PROJECT}/${IMAGE_NAME}" IMAGE_TAG = 'latest' HARBOR_CREDENTIALS_ID = '3a4a4463-784d-4e91-9457-9dfd64722ecb' APP_NAME = 'effekt-interface' HOST_PORT = '5010' CONTAINER_PORT = '5010' DEPLOY_HOST = '39.170.26.156' DEPLOY_PORT = '22' DEPLOY_USER = 'root' DEPLOY_CREDENTIALS_ID = '82d14a67-250f-46b0-8b13-50e874a11933' } options { timestamps() disableConcurrentBuilds() buildDiscarder(logRotator(numToKeepStr: '20')) } stages { stage('Checkout') { steps { checkout([ $class: 'GitSCM', branches: [[name: '*/master']], userRemoteConfigs: [[ url: env.GIT_REPO, credentialsId: env.GIT_CREDENTIALS_ID ]] ]) } } stage('Build Image') { steps { script { dockerImage = docker.build("${env.IMAGE}:${env.IMAGE_TAG}") } } } stage('Push Image To Harbor') { steps { script { docker.withRegistry("https://${env.HARBOR_URL}", env.HARBOR_CREDENTIALS_ID) { dockerImage.push(env.IMAGE_TAG) } } } } stage('Deploy') { steps { script { def remote = [ name: 'deploy-server', host: env.DEPLOY_HOST, port: env.DEPLOY_PORT as int, user: env.DEPLOY_USER, allowAnyHosts: true, credentialsId: env.DEPLOY_CREDENTIALS_ID ] withCredentials([usernamePassword(credentialsId: env.HARBOR_CREDENTIALS_ID, usernameVariable: 'HARBOR_USER', passwordVariable: 'HARBOR_PASS')]) { sshCommand remote: remote, command: """ set -e docker login ${env.HARBOR_URL} -u ${HARBOR_USER} -p '${HARBOR_PASS}' docker pull ${env.IMAGE}:${env.IMAGE_TAG} docker rm -f ${env.APP_NAME} || true docker run -d \\ --name ${env.APP_NAME} \\ --restart always \\ -p ${env.HOST_PORT}:${env.CONTAINER_PORT} \\ ${env.IMAGE}:${env.IMAGE_TAG} docker ps --filter name=${env.APP_NAME} """, sudo: false } } } } stage('Verify') { steps { script { def remote = [ name: 'deploy-server', host: env.DEPLOY_HOST, port: env.DEPLOY_PORT as int, user: env.DEPLOY_USER, allowAnyHosts: true, credentialsId: env.DEPLOY_CREDENTIALS_ID ] sshCommand remote: remote, command: """ set -e docker ps --filter name=${env.APP_NAME} curl -I http://127.0.0.1:${env.HOST_PORT} """, sudo: false } } } } post { always { sh 'docker image prune -f || true' } success { echo 'Pipeline finished successfully.' } failure { echo 'Pipeline failed.' } } }