Jenkins Pipeline中CleanWs()按指定模式清理文件失败的求助
问题分析与解决方案
首先明确:cleanWs 并不适合你的需求,原因如下:
- cleanWs 的设计目标是清理整个工作区,默认会删除工作区内所有内容。它的
patterns参数逻辑是:INCLUDE表示保留匹配的文件、删除其余所有;EXCLUDE表示删除除匹配文件外的所有——和你要「仅删除特定子文件夹内指定文件」的需求完全相反。 - 你配置了
deleteDirs: true,这会直接删除目录本身,而非仅删除目录内的目标文件。 - 即便调整参数,cleanWs 也无法限定仅对某个子文件夹执行操作,它的匹配规则是针对整个工作区根目录的。
推荐替代方案
方案1:用命令行直接删除(最通用,无需额外插件)
根据你的运行环境选择对应的步骤:
- Linux/macOS 环境:
sh ''' # 直接进入目标目录删除指定文件 cd "${WORKSPACE}/some_folders/folder_to_clean" && rm -f *.png *.log *.lock Result_*.tsv report.html '''
或者用更安全的 find 命令(无需切换目录):
sh ''' find "${WORKSPACE}/some_folders/folder_to_clean" -maxdepth 1 -type f \ \( -name "*.png" -o -name "*.log" -o -name "*.lock" -o -name "Result_*.tsv" -o -name "report.html" \) \ -delete '''
- Windows 环境:
bat ''' del /Q "%WORKSPACE%\\some_folders\\folder_to_clean\\*.png" del /Q "%WORKSPACE%\\some_folders\\folder_to_clean\\*.log" del /Q "%WORKSPACE%\\some_folders\\folder_to_clean\\*.lock" del /Q "%WORKSPACE%\\some_folders\\folder_to_clean\\Result_*.tsv" del /Q "%WORKSPACE%\\some_folders\\folder_to_clean\\report.html" '''
方案2:使用 File Operations 插件(需提前安装)
如果你的 Jenkins 安装了 File Operations 插件,可以用更直观的 Pipeline 语法实现:
fileOperations([ deleteFileOperation( includes: '*.png,*.log,*.lock,Result_*.tsv,report.html', directory: "${WORKSPACE}/some_folders/folder_to_clean", quiet: true // 避免无匹配文件时报错 ) ])
内容的提问来源于stack exchange,提问作者badbadllama
相关产品推荐
相关产品推荐

