def call(Map args = [:]) { String remoteHost = args.remoteHost ?: env.REMOTE_HOST String remotePort = args.remotePort ?: env.REMOTE_PORT String remotePath = args.remotePath ?: env.REMOTE_PATH String jarName = args.jarName ?: env.JAR_NAME String profile = args.profile ?: env.profile String jvmArgs = args.jvmArgs ?: env.JVM_ARGS ?: '' String backupTime = args.backupTime ?: params.BACKUP_TIME // 1. 找到要回滚到的备份包 String findCmd = """ssh -o StrictHostKeyChecking=no ${remoteHost} \ "cd ${remotePath} && ls ${jarName}-${backupTime ?: '*'} | tail -1" """ String backupJar = sh(script: findCmd, returnStdout: true).trim() if (!backupJar) error("未找到备份包,回滚终止") // 2. 停当前服务 sh "ssh -o StrictHostKeyChecking=no ${remoteHost} 'lsof -ti:${remotePort} | xargs -r kill -9 || true'" // 3. 还原包 sh "ssh -o StrictHostKeyChecking=no ${remoteHost} 'cd ${remotePath} && cp -f ${backupJar} ${jarName}'" // 4. 重启 sh """ssh -o StrictHostKeyChecking=no ${remoteHost} \ "sh -c 'cd ${remotePath} && nohup java ${jvmArgs} -jar ${jarName} --spring.profiles.active=${profile} > server.log 2>&1 &'" """ PrintMes("回滚完成:${backupJar} 已部署到 ${remoteHost}:${remotePort}", 'green') }