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

Jenkins Pipeline中按文件扩展名排序文件名列表的实现

在Jenkins Pipeline中按自定义扩展名顺序排序文件列表

要实现按指定扩展名优先级排序文件列表,你可以利用Groovy的排序能力,结合自定义的扩展名优先级映射来完成,具体实现如下:

核心思路

  1. 定义你需要的扩展名排序优先级列表(比如json > py > sql > txt > yaml)
  2. 将该列表转换为索引映射,方便快速获取每个扩展名的排序权重
  3. 对文件列表进行排序,根据每个文件的扩展名对应的权重来排序

完整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:30:21