groovy 文件名列表基于文件扩展名在Jenkins管道中排序

lrpiutwd  于 2022-11-01  发布在  Jenkins
关注(0)|答案(1)|浏览(170)

我有一个清单,其中包含文件名(变更日志)在Jenkins管道。我希望排序的基础上,文件扩展名的列表。
如果您是一个数据库管理员,那么您d.py。
我想将此列表排序如下-lines = [c.json,d.py,b.sql,e.txt,a.yaml]
先谢谢你。

qcbq4gxm

qcbq4gxm1#

您可以将Groovy Sort与自定义比较器一起使用。请参考以下示例。

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                script {
                    def lines = ["a.yaml", "b.sql", "c.json", "d.py", "e.txt"]
                    echo "Not sorted: $lines"               
                    sortFiles(lines)
                    echo "Sorted: $lines"
                }
            }
        }
    }
}

@NonCPS
def sortFiles(def files) {
    return files.sort { s1, s2 -> s1.substring(s1.lastIndexOf('.') + 1) <=> s2.substring(s2.lastIndexOf('.') + 1) }
}

更新

将不带扩展名的文件置于顶部

@NonCPS
def sortFiles(def files) {
return files.sort { s1, s2 -> 
        def s1Index = s1.lastIndexOf('.')
        def s2Index = s2.lastIndexOf('.')
        if((s1Index == -1)) { // S1 doesn't have an extension, S1 comes first 
            return -1
        } else if (s2Index == -1) { // S1 have an extension but S2 doesn't so s2 comes first
            return 1
        } else {
            return s1.substring(s1Index + 1) <=> s2.substring(s2Index + 1)
        }
    }
}

相关问题