You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jenkins fileOperations插件按特定模式重命名文件及解决失败问题

解决Jenkins fileOperations插件重命名带版本号文件的问题

兄弟,这个坑我之前刚踩过!你遇到的FATAL: The source file/var/jenkins_home/workspace/*.txt doesn't exist报错,根源在于fileOperations插件的fileRenameOperation根本不支持直接用*.txt这种通配符当源路径——它会把*.txt当成一个真实的文件名去查找,而不是匹配所有txt文件,这不就找不到了嘛。

针对你要把MyFile<VersionNumber>.txt(比如MyFile_v12.1.4.txt)重命名为固定MyFile.txt的需求,给你两个实用的解决方案:

方案1:结合Jenkins Pipeline的findFiles函数+fileOperations插件

先通过findFiles精准匹配到符合规则的文件,再逐个调用重命名操作,完美适配插件的要求:

pipeline {
    agent any
    stages {
        stage('Rename Versioned Files') {
            steps {
                script {
                    // 匹配所有以MyFile开头、以.txt结尾的文件,兼容各种版本号格式
                    def targetFiles = findFiles(glob: 'MyFile*.txt')
                    
                    if (targetFiles.size() > 0) {
                        // 遍历找到的文件,逐个重命名为MyFile.txt
                        targetFiles.each { file ->
                            // 跳过已经是目标名称的文件,避免重复操作报错
                            if (file.name != 'MyFile.txt') {
                                fileOperations([
                                    fileRenameOperation(
                                        source: file.name,
                                        destination: 'MyFile.txt'
                                    )
                                ])
                                echo "✅ 已将 ${file.name} 重命名为 MyFile.txt"
                            }
                        }
                    } else {
                        echo "ℹ️ 未找到符合MyFile<VersionNumber>.txt格式的文件"
                    }
                }
            }
        }
    }
}

如果你的版本号格式有严格要求(比如必须是MyFile_vx.x.x.txt这种带下划线和点的格式),可以把匹配规则改成更精准的正则:

// 只匹配MyFile_v+数字点数字点数字.txt格式的文件
def targetFiles = findFiles().findAll { it.name ==~ /MyFile_v\d+\.\d+\.\d+\.txt/ }

方案2:直接用Shell命令(简单粗暴高效)

要是你不需要死磕fileOperations插件,用Shell命令会更直接,尤其在Linux/macOS的Jenkins代理上:

pipeline {
    agent any
    stages {
        stage('Rename Files via Shell') {
            steps {
                sh '''
                    # 遍历所有符合MyFile*.txt模式的文件
                    for file in MyFile*.txt; do
                        # 跳过已经是目标名称的文件
                        if [ "$file" != "MyFile.txt" ]; then
                            mv "$file" MyFile.txt
                            echo "Renamed $file to MyFile.txt"
                        fi
                    done
                '''
            }
        }
    }
}

这个方法会自动处理重复文件的情况,避免不必要的报错。

重要提醒

  • 如果工作空间里同时存在多个符合模式的文件(比如MyFile_v12.1.4.txt和MyFile_v13.0.0.txt),重命名会直接覆盖MyFile.txt,记得提前处理这种冲突场景(比如先备份或者只保留最新版本的文件)。
  • 确保Jenkins代理用户有足够的权限修改工作空间内的文件,不然会出现权限报错。

内容的提问来源于stack exchange,提问作者Chriss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:12:06