Jenkins piepline中基于文件扩展名排序的文件名列表



我有一个包含Jenkins管道中的文件名(更改日志)的列表。我希望根据文件扩展名对该列表进行排序。

示例-lines = [a]。[/strong]

我想把这个列表排序如下-lines = [c];. json, d.py, b.sql, e.tx, a.m l]

提前感谢。

可以将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)
}
}
}

最新更新