Post-Build-Script插件仅适用于Jenkins自由风格任务,不支持Pipeline;Pipeline应使用post指令+sh步骤或cleanWs()等原生方式清理临时卷,并需谨慎筛选路径避免误删。

Post-Build-Script 插件本身不原生支持 Pipeline 语法,它只适用于传统自由风格(Freestyle)任务。如果你正在使用 Jenkins Pipeline(即 Jenkinsfile),直接配置 Post-Build-Script 是无效的——Pipeline 有更强大、更推荐的内置机制来完成清理,比如 post 指令 + sh 步骤或专用插件。
确认你的流水线类型
先判断你用的是哪种任务:
- 自由风格任务(Freestyle Project):可安装 Post-Build-Script 插件,在“构建后操作”里添加 Shell 脚本执行清理
- Pipeline 任务(含 Multibranch Pipeline):应改用
post { always { sh '...' } }或cleanWs()等原生方式,无需 Post-Build-Script
Pipeline 中清理临时卷资源的正确做法
对于 Docker 构建中产生的临时卷(如 docker build 中的中间层、docker run --rm -v 挂载的临时目录、或 /tmp 下残留的构建产物),推荐在 post 块中统一处理:
- 用
sh执行命令清理宿主机上的临时路径:
sh '''
# 清理 /tmp 下 Jenkins 相关临时文件(注意避免误删其他进程文件)
find /tmp -maxdepth 1 -type d -name "jenkins-*" -mtime +1 -exec rm -rf {} +
# 清理已停止但未自动移除的匿名卷(谨慎!建议加 --filter dangling=true)
docker volume prune -f --filter dangling=true
# 清理未使用的构建缓存(Docker 20.10+)
docker builder prune -f
''' - 若使用
docker.withRegistry或docker.build,建议显式设置--no-cache或挂载干净的/tmp卷,从源头减少残留 - 对 Jenkins 工作空间内生成的临时卷挂载点(如
./target/docker、./build/tmp),可在always块中用cleanWs()或sh 'rm -rf ./build/tmp ./target/docker'
自由风格任务中使用 Post-Build-Script 插件
仅当确定是 Freestyle 项目时才适用:
- 安装插件后,在任务配置页 → “构建后操作” → 选择 “Execute a set of scripts”
- 勾选 “Add build step” → 选择 “Execute shell”
- 填入类似以下内容(根据实际路径和策略调整):
#!/bin/bash
echo "Cleaning up temporary volumes..."
docker volume ls -q | grep 'jenkins.*tmp' | xargs -r docker volume rm
find /tmp -name "docker-build-*" -type d -mtime +1 -exec rm -rf {} \; - 建议勾选 “Run only if build succeeds” 或 “Run regardless of build result”,按需选择清理时机
关键注意事项
清理临时卷容易误伤运行中服务,务必遵守这些原则:
- 不要无条件
docker volume prune -a—— 会删除所有未被容器引用的卷,包括其他项目的持久化数据 - 避免在
/tmp下盲目rm -rf *,优先按前缀(如jenkins-、docker-build-)或修改时间筛选 - 若使用 Kubernetes Agent,临时卷通常随 Pod 销毁自动清理,重点检查 Jenkins 主节点本地的
/tmp和docker volume - 建议将清理脚本封装为可复用的 Groovy 函数或托管脚本(通过 Managed Script 插件),便于审计和版本控制











