我想排序Jenkins管道中的对象列表。我得到以下运行在本地或内詹金斯代码不同的结果:在Jenkins管道中排序排序
pipeline {
agent any
stages {
stage('default'){
steps {
script {
@NonCPS
def nonCpsTest = {
def list = [
['CreationDate': '200'],
['CreationDate': '300'],
['CreationDate': '100'],
]
def rval = list.sort { it['CreationDate'] }
echo "Rval=$rval"
echo "List=$list"
}
nonCpsTest()
}
}
}
}
}
当我在本地使用Groovy Shell执行这个脚本(groovysh
)结果是
groovy:000> list = [[ 'CreationDate':200 ], [ 'CreationDate':300 ], [ 'CreationDate':100 ]]
===> [[CreationDate:200], [CreationDate:300], [CreationDate:100]]
groovy:000> rval = list.sort { it['CreationDate'] }
===> [[CreationDate:100], [CreationDate:200], [CreationDate:300]]
groovy:000> list
===> [[CreationDate:100], [CreationDate:200], [CreationDate:300]]
groovy:000> list == rval
===> true
虽然詹金斯服务器上我得到以下
[Pipeline] {
[Pipeline] stage
[Pipeline] { (default)
[Pipeline] script
[Pipeline] {
[Pipeline] echo
Rval=300
[Pipeline] echo
List=[[CreationDate:200], [CreationDate:300], [CreationDate:100]]
[Pipeline] }
[Pipeline] // script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
是詹金斯的工作流程使反正列表不变,或者重写sort
方法,如果是的话,该怎么办我Jenkins管道代码中的地方列表排序?
您应该能够使用' rval',对吗? – Rao
我试图拉列表中最年轻的元素,作为具有“最高”日期的元素。 Rval仅用于调试目的,在Jenkins和控制台中显示不同的行为。 – toske
@toske Jenkins服务器的输出指向代码'echo“的这一部分List = $ list”'您显示的是未排序的初始列表(排序不会改变输入列表,但会返回一个新排序列表)。 'rval'拥有这个新的排序列表。 –