luhaowen 2 days ago
parent
commit
2aaa2a84a3
1 changed files with 43 additions and 0 deletions
  1. 43 0
      vars/cleanWorkspace.groovy

+ 43 - 0
vars/cleanWorkspace.groovy

@@ -0,0 +1,43 @@
+// var/cleanWorkspace.groovy 清理工作空间
+def call(Map config = [:]) {
+    def cleanBeforeBuild = config.get('clean', true)
+    def keepPatterns = config.get('keep', ['.git', '.gradle'])
+
+    if (!cleanBeforeBuild) {
+        echo "⏭️ Skipping workspace cleanup."
+        echo "✅ Workspace ready at: ${pwd()}"
+        return
+    }
+
+    echo "🧹 Cleaning workspace, preserving: ${keepPatterns}"
+    if (isUnix()) {
+        cleanUnix(keepPatterns)
+    } else {
+        cleanWindows(keepPatterns)
+    }
+    echo "✅ Workspace ready at: ${pwd()}"
+}
+
+// ---------- Unix ----------
+private void cleanUnix(List keep) {
+    def mask = keep.join('|')
+    sh """
+      set +x
+      shopt -s extglob dotglob
+      rm -rf !(${mask})
+    """
+}
+
+// ---------- Windows ----------
+private void cleanWindows(List keep) {
+    // 先把要保留的写成 bat 可识别的“排除”语法
+    def exclude = keep.collect { "/EXCLUDE:${it}" }.join(' ')
+    bat """
+      for /f "delims=" %%i in ('dir /b /a-d') do (
+        echo %%i | findstr /i /v "${keep.join('|')}" >nul && del "%%i"
+      )
+      for /d %%d in (*) do (
+        echo %%d | findstr /i /v "${keep.join('|')}" >nul && rd /s /q "%%d"
+      )
+    """
+}