Jenkins Pipeline中构建后清理工作空间的关键方式有三种:一是用post+sh执行精准shell命令清理;二是调用cleanWs()插件方法安全清空;三是用post+Groovy脚本实现条件化动态清理,均需结合archiveArtifacts等前置操作避免误删。

在 Jenkins Pipeline 中,构建后清理工作空间不是“可选项”,而是保障构建稳定性和磁盘健康的关键动作。最直接、可控且推荐的方式,是在 post 段落中使用 sh 步骤执行清理命令,或调用预置的 Groovy 脚本——无需额外插件,开箱即用。
用 post + sh 实现轻量级自动清理
这是最常用、最易维护的做法。适用于大多数 Java/Maven、Node.js 或 Python 项目,目标明确:清掉编译产物、临时文件和未跟踪的构建残留。
- 在
post块中定义always或success分支,确保无论构建成败都执行清理(推荐always) - 使用标准 shell 命令组合,例如:
sh 'rm -rf target/ dist/ build/ *.jar *.war node_modules/ .pytest_cache/ __pycache__/ && find . -name "*.log" -delete' - 避免
rm -rf *这类高危操作,只清理已知可删目录和文件模式 - 若需保留某次构建产物(如归档包),可在
archiveArtifacts后再清理,确保不误删
用 post + cleanWs() 插件指令快速清空
如果你已安装 Workspace Cleanup Plugin(Jenkins 默认推荐插件之一),可直接调用内置方法,语义清晰、安全性更高。
- 语法简洁:
cleanWs notFailBuild: true, disableDeferredWipeout: false -
notFailBuild: true表示即使清理失败也不标记构建为失败 -
disableDeferredWipeout: false允许在构建结束前延迟清理(适合大目录,避免阻塞后续任务) - 它默认跳过
.git、Jenkinsfile等受控文件,比裸rm更稳妥
用 post + Groovy 脚本实现条件化精准清理
当需要按分支、环境或构建参数动态决定清理范围时,Groovy 提供了判断能力。例如:只在非 master 分支清理 node_modules,或跳过测试报告目录。
- 在
post中嵌入script块,调用sh并传入动态路径 - 示例逻辑:
script { if (env.BRANCH_NAME != 'master') { sh 'rm -rf node_modules/' } } - 也可封装成共享库函数,复用于多个流水线,提升一致性
- 注意:Groovy 中访问环境变量用
env.VAR_NAME,不要写成$VAR_NAME
清理前必须确认的三件事
盲目清理可能破坏下游任务依赖,动手前请核对:
- 本次构建是否生成了需要归档的产物(如
target/*.jar)?确认archiveArtifacts已执行完毕 - 是否有下游 Job 或手动触发任务会读取当前工作空间中的日志、覆盖率报告等?如有,应改用
publishHTML或junit等方式导出 - 是否启用了 增量构建(如 Maven 的
-Dmaven.test.skip=true)?若依赖上一次的target/classes,则不应清理target/


















