Jenkins Pipeline中按文件扩展名排序文件名列表的实现
在Jenkins Pipeline中按自定义扩展名顺序排序文件列表
要实现按指定扩展名优先级排序文件列表,你可以利用Groovy的排序能力,结合自定义的扩展名优先级映射来完成,具体实现如下:
核心思路
- 定义你需要的扩展名排序优先级列表(比如
json>py>sql>txt>yaml) - 将该列表转换为索引映射,方便快速获取每个扩展名的排序权重
- 对文件列表进行排序,根据每个文件的扩展名对应的权重来排序
完整Pipeline示例代码
pipeline { agent any stages { stage('Sort Files by Extension') { steps { script { // 原始文件列表 def lines = ['a.yaml', 'b.sql', 'c.json', 'd.py', 'e.txt'] // 自定义扩展名排序优先级 def extOrder = ['json', 'py', 'sql', 'txt', 'yaml'] // 转换为优先级映射:扩展名 -> 排序索引(索引越小越靠前) def extPriority = extOrder.withIndex().collectEntries { ext, idx -> [ext, idx] } // 执行排序 def sortedLines = lines.sort { file -> // 提取文件扩展名(处理文件名含多个点的情况,取最后一个点后的内容) def ext = file.split('\\.').last() // 获取优先级,未定义的扩展名默认放在最后 extPriority.getOrDefault(ext, extOrder.size()) } // 打印结果验证 println "原始列表: ${lines}" println "排序后列表: ${sortedLines}" } } } } }
代码说明
- 自定义优先级调整:如果需要修改排序顺序,直接调整
extOrder列表的元素顺序即可 - 处理未定义的扩展名:
getOrDefault方法会把不在extOrder里的扩展名默认放在排序结果的最后,如果想让这类文件排在前面,可以把默认值改为-1 - 多扩展名文件兼容:
split('\\.').last()可以正确处理类似file.v2.json这类含多个点的文件名,提取最后一个扩展名
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

