Jenkins Workspace Cleanup Plugin使用问题:执行后文件未删除
Jenkins工作区清理不生效问题排查与解决
1. 修正文件匹配规则的逻辑错误
你的cleanWs配置中,patterns的规则逻辑完全搞反了:
- 当设置
type: 'INCLUDE'时,只有匹配该规则的文件会被删除,其余所有文件都会被保留。你当前只指定了删除.gitignore,所以工作区里的其他文件自然不会动。 - 同时叠加的
EXCLUDE规则在INCLUDE模式下毫无意义,因为此时只有被INCLUDE的文件才会被处理,排除规则根本没机会生效。
如果你的需求是保留.gitignore和.propsfile,删除其他所有文件及目录,正确的配置应该用EXCLUDE模式来指定要保留的文件:
post { always { cleanWs(cleanWhenNotBuilt: false, deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true, patterns: [[pattern: '.gitignore', type: 'EXCLUDE'], [pattern: '.propsfile', type: 'EXCLUDE']]) } }
如果是要删除所有文件(包括.gitignore),只保留.propsfile,去掉.gitignore的EXCLUDE规则即可。
2. 验证插件版本兼容性
你使用的0.46版本(2021年发布)存在流水线场景下模式匹配的已知bug,建议:
- 直接升级插件到最新稳定版(当前最新为0.48+),新版本修复了多个规则解析的问题
- 若暂时无法升级,先移除
patterns配置,测试基础清理是否生效:
post { always { cleanWs(cleanWhenNotBuilt: false, deleteDirs: true, disableDeferredWipeout: true, notFailBuild: true) } }
如果基础清理能正常删除工作区,再逐步添加patterns规则调试。
3. 检查权限与节点配置
- 确认Jenkins节点的执行用户对该工作区目录有完整的读写删除权限,权限不足会导致文件看似未被删除
- 检查Jenkins全局配置中是否存在强制保留工作区的策略,部分全局设置会覆盖流水线的
cleanWs配置 - 若使用容器化节点(比如Docker代理),确认工作区的挂载路径是否正确,清理操作是否作用在实际的挂载目录上
内容的提问来源于stack exchange,提问作者Bryan Tan
相关产品推荐
相关产品推荐

