luhaowen 3 тижнів тому
батько
коміт
e6d5edfc06
2 змінених файлів з 56 додано та 2 видалено
  1. 2 2
      vars/cleanWorkspace.groovy
  2. 54 0
      vars/deployJar.groovy

+ 2 - 2
vars/cleanWorkspace.groovy

@@ -5,7 +5,7 @@ def call(Map config = [:]) {
 
     if (!cleanBeforeBuild) {
         echo "⏭️ Skipping workspace cleanup."
-        echo "✅ Workspace ready at: ${pwd()}"
+        echo "✅ Workspace ready for next build."
         return
     }
 
@@ -15,7 +15,7 @@ def call(Map config = [:]) {
     } else {
         cleanWindows(keepPatterns)
     }
-    echo "✅ Workspace ready at: ${pwd()}"
+    echo "✅ Workspace cleaned, ready for next build."
 }
 
 // ---------- Unix ----------

+ 54 - 0
vars/deployJar.groovy

@@ -0,0 +1,54 @@
+#!/usr/bin/env groovy
+/**
+ * 一键发布 SpringBoot jar 到远程 Linux 主机
+ * 依赖环境变量(Jenkinsfile 的 environment {} 已定义即可):
+ *   JAR_NAME       例:jeecg-system-start-3.8.2.jar
+ *   JAR_PATH       例:sohoyw-som/jeecg-module-system/jeecg-system-start/target/${JAR_NAME}
+ *   REMOTE_HOST    例:root@52.83.132.95
+ *   REMOTE_PORT    例:8080
+ *   REMOTE_PATH    例:/srv/server
+ *   profile        例:test
+ *
+ * 用法:
+ *   deploySpringBoot()
+ * 或
+ *   deploySpringBoot(jarName: 'xxx.jar', profile: 'prod')
+ */
+def call(Map args = [:]) {
+    /* 0. 读取参数(优先使用传参,其次 fallback 到环境变量) */
+    String jarName   = args.jarName   ?: env.JAR_NAME
+    String jarPath   = args.jarPath   ?: env.JAR_PATH
+    String remoteHost= args.remoteHost?: env.REMOTE_HOST
+    String remotePort= args.remotePort?: env.REMOTE_PORT
+    String remotePath= args.remotePath?: env.REMOTE_PATH
+    String profile   = args.profile   ?: env.profile
+
+    String remoteJar = "${remotePath}/${jarName}"
+
+    echo ">>> 开始发布 ${jarName} 到 ${remoteHost}:${remotePort}"
+
+    /* 1. 停旧服务(端口进程) */
+    sh """
+       ssh -o StrictHostKeyChecking=no ${remoteHost} \
+          'lsof -ti:${remotePort} | xargs -r kill -9 || true'
+    """
+
+    /* 2. 备份旧包(如果存在) */
+    sh """
+       ssh -o StrictHostKeyChecking=no ${remoteHost} \
+          'test -f ${remoteJar} && \\
+           mv ${remoteJar} ${remoteJar}-\$(date +%Y%m%d%H%M) || true'
+    """
+
+    /* 3. 传新包 */
+    sh "scp -o StrictHostKeyChecking=no ${jarPath} ${remoteHost}:${remoteJar}"
+
+    /* 4. 启动新服务 */
+    sh """
+       ssh -o StrictHostKeyChecking=no ${remoteHost} \
+          'cd ${remotePath} && nohup java -jar ${jarName} \
+           --spring.profiles.active=${profile} > server.log 2>&1 &'
+    """
+
+    echo "<<< 发布完成"
+}