pipeline { agent any tools { jdk 'jdk8' maven 'maven3' } parameters { booleanParam name: 'build_before_deploy', defaultValue: true, description: '是否拉取新代码并编译打包?' booleanParam name: 'transfer_jar', defaultValue: true, description: '是否发送jar文件?' booleanParam name: 'clean_after_deploy', defaultValue: true, description: '发布完成后是否清除编译目录?' choice name: 'branch', description: '选择分支', choices: ['master'] booleanParam name: 'yylr_java', defaultValue: true } stages { stage('Checkout') { when { equals expected: 'true', actual: env.build_before_deploy } steps { git branch: "${env.branch}", credentiablsId: 'id_rsa_example', url: 'git@example.com:java/yylr.git' } } stage('Compile') { when { equals expected: 'true', actual: env.build_before_deploy } steps { configFileProvider([configFile(fileId: 'e9a436fd-0c1c-49ec-b352-f48310650d8a', variable: 'MAVEN_SETTINGS_XML')]) { sh 'mvn -s $MAVEN_SETTINGS_XML clean package -Dmaven.test.skip=true' } } } stage('Deploy') { when { anyOf { environment name: 'yylr_java', value: 'true' } } steps { script { def dt = new Date().format('yyyy-MMdd-HHmmss') def remoteDir = '/opt/yylr/java' def distDir = remoteDir + '/work' def services = [] if (env.yylr_java == 'true') { services.push([ name: 'jeeplus-vue.war', service: 'api', from: 'jeeplus-web/target/jeeplus-vue.war' ]) } withCredentials([sshUserPrivateKey(credentialsId: 'id_rsa_example', keyFileVariable: 'identity')]) { def remote = [name: '11.22.33.44', host: '11.22.33.44', user: 'deploy', port: 22, allowAnyHosts: true, identityFile: identity] services.each { if (env.transfer_jar == 'true') { echo "传输jar文件(${it.name})..." def distJar = "${distDir}/${it.name}" def distJarTmp = "${distJar}.tmp" sshPut remote: remote, from: it.from, into: distJarTmp echo "更新并重启(${it.id})..." sshCommand remote: remote, command: """ cd ${remoteDir} docker compose stop -t 20 ${it.service} if test -f ${distJarTmp}; then if test -f ${distJar}; then #mv -f ${distJar} ${distJar}-bak-${dt} mv -f ${distJar} ${distJar}.old fi mv -f ${distJarTmp} ${distJar} fi docker compose up -d ${it.service} """ } else { echo "仅重启(${it.name})..." sshCommand remote: remote, command: """ cd ${remoteDir} docker compose stop -t 20 ${it.service} docker compose up -d ${it.service} """ } } } } } } stage('Clean') { when { equals expected: 'true', actual: env.clean_after_deploy } steps { configFileProvider([configFile(fileId: 'e9a436fd-0c1c-49ec-b352-f48310650d8a', variable: 'MAVEN_SETTINGS_XML')]) { sh 'mvn -s $MAVEN_SETTINGS_XML clean' } } } } }