Jenkins中使用通配符路径判断文件或目录是否存在的实现方法
Jenkins通配符路径存在判断实现方案
Jenkins内置fileExists方法不支持通配符匹配,无法直接识别*service泛化路径,需要先通过支持通配符的路径扫描方法获取匹配结果,再做存在性判断。
方案1:使用内置findFiles步骤(推荐,需安装Pipeline Utility Steps插件)
绝大多数Jenkins环境都会预装该插件,写法最简洁:
when { expression { // glob参数支持Ant风格通配符,扫描匹配规则的目录 def matchedDirs = findFiles(glob: "*service/target/test-classes") // 匹配到至少1个符合要求的目录就返回true return matchedDirs.length > 0 } }
如果需要匹配任意层级子目录下的*service后缀目录,可以把glob规则修改为**/*service/target/test-classes。
方案2:Groovy原生实现(无需额外插件)
如果没有安装对应插件,可以用原生Groovy语法实现路径扫描:
when { expression { // 获取当前工作目录路径 def currentWorkspace = pwd() // 筛选所有后缀为service且子目录下存在target/test-classes的目录 def serviceDirs = new File(currentWorkspace).listFiles({ file -> file.isDirectory() && file.name.endsWith("service") && new File(file, "target/test-classes").exists() } as FileFilter) return serviceDirs != null && serviceDirs.length > 0 } }
注意事项
- 路径判断逻辑需要和后续执行步骤在同一个agent节点上执行,避免跨节点工作目录不一致导致的判断错误
- 如果目录生成逻辑在同一个Pipeline的前置步骤中,需要确保目录生成完成后再执行该判断逻辑
内容的提问来源于stack exchange,提问作者Jonathan Hagen
相关产品推荐
相关产品推荐

