// 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" ) """ }