如何在Jenkins Pipeline中对findFiles返回的文件名按数字自然排序
根因说明
默认调用files.sort()采用的是字典序排序规则,字符串逐字符比对ASCII值时,test100.csv的第三个字符为1,ASCII值小于test2.csv第三个字符2,因此会出现test10*系列文件排在test2之前的异常排序结果。
解决方案
自定义排序规则,提取文件名中的数字序号转为整型后,按照数字大小排序即可符合预期:
steps { node('master') { script { def files = findFiles glob: "*/test/*.*" // 提取文件名中的连续数字转为整型,按数字大小排序 def sortedFiles = files.sort { file -> (file.name =~ /\d+/)[0] as int } // 遍历输出排序后的文件名 sortedFiles.each { f -> echo f.name } } } }
扩展说明
如果glob规则匹配到非test数字.csv格式的文件,可先过滤再排序,避免正则匹配报错:
def sortedFiles = files .findAll { it.name ==~ /test\d+\.csv/ } // 仅保留符合命名规则的文件 .sort { f -> (f.name =~ /\d+/)[0] as int }
内容的提问来源于stack exchange,提问作者Narasinga Rao
相关产品推荐
相关产品推荐

