pipeline { agent any options { buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '2', numToKeepStr: '2')) } stages { stage('Setup Parameters & ENV') { steps { configFileProvider([configFile(fileId: 'xiaomayi-cloud-nacos', variable: 'settingsFile')]) { script { def config = readJSON file:"$settingsFile" def jobNameStr = JOB_NAME.tokenize('/') as String[] def jobName = jobNameStr[0] def branchConfig = config."branchConfig"."${env.BRANCH_NAME}" def serviceConfig = config."serviceConfig"."${jobName}" MAVEN_SET = branchConfig.MAVEN_SET registry = branchConfig.registry registryCredential = branchConfig.registryCredential namespace = branchConfig.namespace jenkinsAgent = branchConfig.jenkinsAgent echo "jobName: ${jobName}" echo "The Maven Set XML for the ${env.BRANCH_NAME} branch is: ${MAVEN_SET}" projectName = serviceConfig.containerName servicePath = serviceConfig.servicePath jarPackageName = serviceConfig.jarPackageName baseImage = "${registry}/xiaomayi-base/jdk:17.0.16-centos8-dos" port = serviceConfig."port" jarFile = "${jarPackageName}" jarFilePath = "${servicePath}/target" serverHost01= serviceConfig.serverHost01 echo "jarFile: ${jarFile}" echo "jarFilePath: ${jarFilePath}" echo "serverHost01: ${serverHost01}" if ("${env.BRANCH_NAME}" == "dev") { serverIP01 = branchConfig."${serverHost01}" echo "serverIP01: ${serverIP01}" properties([ parameters([ string( defaultValue: 'dev', description: '编译参数', name: 'PROFILES', trim: true ) ]) ]) } else if ("${env.BRANCH_NAME}" == "test"){ serverIP01 = branchConfig."${serverHost01}" echo "serverIP01: ${serverIP01}" properties([ parameters([ string( defaultValue: 'test', description: '编译参数', name: 'PROFILES', trim: true ) ]) ]) } else if ("${env.BRANCH_NAME}" == "master") { properties([ parameters([ string( defaultValue: 'prod', description: '编译参数', name: 'PROFILES', trim: true ) ]) ]) serverIP01 = branchConfig."${serverHost01}" echo "serverIP01: ${serverIP01}" } else { error("Build failed because failed to fetch settings for branch") } echo "The serverIP for the branch: ${env.BRANCH_NAME}, profile: ${PROFILES} is: ${serverIP01}" } } } } stage('Build') { agent { // docker { // image "maven:3.8.6-openjdk-8" // args '-v /etc/hosts:/etc/hosts:ro' // label jenkinsAgent // } label { label jenkinsAgent } } steps { configFileProvider([configFile(fileId: MAVEN_SET, variable: 'MAVEN_SETTINGS_XML')]) { sh "/usr/local/maven/bin/mvn --settings ${MAVEN_SETTINGS_XML} dependency:purge-local-repository -Dinclude=com.xiaomayi -fpom.xml clean package -P${PROFILES} -Dmaven.test.skip=true" sh "ls -lsh ${jarFilePath}/${jarFile}" sh "md5sum ${jarFilePath}/${jarFile}" // echo "MD5 ${jarFile}: `md5sum ${jarFilePath}/${jarFile}`" } } } stage('Container Build') { options { skipDefaultCheckout() } agent { label { label jenkinsAgent } } steps { script { echo "VAR_BASE_IMAGE: ${baseImage}" echo "VAR_PORT: ${port}" echo "VAR_JARFILE: ${jarFile}" echo "VAR_JARFILE_PATH: ${jarFilePath}" docker.withRegistry("https://"+registry, registryCredential) { dockerImage = docker.build("${namespace}/${projectName}:${PROFILES}-${env.BUILD_ID}", "--build-arg VAR_PROFILES=${PROFILES} --build-arg VAR_BASE_IMAGE=${baseImage} --build-arg VAR_PORT=${port} --build-arg VAR_JARFILE=${jarFile} --build-arg VAR_JARFILE_PATH=${jarFilePath} -f .jenkins/Dockerfile ./") dockerImage.push() // dockerImage.push('latest') } sh "docker rmi -f ${namespace}/${projectName}:${PROFILES}-${env.BUILD_ID}" sh "docker rmi -f ${registry}/${namespace}/${projectName}:${PROFILES}-${env.BUILD_ID}" } // cleanWs() } } stage("Deploy") { options { skipDefaultCheckout() } agent { label { label jenkinsAgent } } steps { script { sh "ssh -o StrictHostKeyChecking=no esxi@${serverIP01} 'cd /usr/local/docker/nginx/html/xiaomayi-nacos-elevue/; ./deploy.sh deploy ${projectName} ${PROFILES}-${env.BUILD_ID}'" } } } } }