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

无需插件在Jenkins的fileExists()函数中处理通配符的方法

解决Jenkins声明式流水线中带动态时间戳的文件存在性检查问题

由于fileExists步骤不支持通配符匹配,且你无法使用额外插件,以下两种原生方案可以解决动态文件名的存在性检查需求,同时修正你原代码中逻辑颠倒的问题(原代码是文件存在则中止,实际需求是文件不存在则中止):

方案一:使用Shell命令匹配文件

通过Shell的通配符查找匹配的文件,判断是否存在:

stage('Check if file exists') {
    steps {
        script {
            // 定义带通配符的文件路径,*匹配任意时间戳部分
            def targetPattern = './path/to/file/name_*.tar.gz'
            // 执行shell命令,获取第一个匹配的文件名(无匹配则输出为空)
            def matchedFile = sh(
                script: "ls -1 ${targetPattern} | head -1",
                returnStdout: true
            ).trim()

            if (matchedFile.isEmpty()) {
                currentBuild.result = "ABORTED"
                error('Could not find file matching pattern name_*.tar.gz!')
            } else {
                echo "Successfully found target file: ${matchedFile}"
            }
        }
    }
}

说明:

  • ls -1 ${targetPattern}列出所有匹配的文件,head -1只取第一个结果(只要存在至少一个符合的文件即可)
  • 通过trim()去除输出中的换行和空格,若结果为空则判定无匹配文件,中止当前阶段

方案二:使用Groovy原生文件查找

纯Groovy实现,无需依赖Shell环境:

stage('Check if file exists') {
    steps {
        script {
            def workspacePath = pwd() // 获取Jenkins工作空间的绝对路径
            def targetDir = new File("${workspacePath}/path/to/file")
            // 用正则表达式匹配文件名:name_后跟数字时间戳,后缀为.tar.gz
            def matchingFiles = targetDir.listFiles({ file ->
                file.name ==~ /name_\d+\.tar\.gz/
            } as FilenameFilter)

            if (!matchingFiles || matchingFiles.length == 0) {
                currentBuild.result = "ABORTED"
                error('Could not find file with timestamp pattern!')
            } else {
                echo "Found ${matchingFiles.length} matching files. First file: ${matchingFiles[0].name}"
            }
        }
    }
}

说明:

  • 利用Groovy的File类遍历目标目录,通过正则表达式name_\d+\.tar\.gz精准匹配带数字时间戳的文件名
  • 若返回的匹配文件数组为空,则判定无目标文件,触发中止逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:47:15