2017-09-21 48 views
0

我想排序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管道代码中的地方列表排序?

+0

您应该能够使用' rval',对吗? – Rao

+0

我试图拉列表中最年轻的元素,作为具有“最高”日期的元素。 Rval仅用于调试目的,在Jenkins和控制台中显示不同的行为。 – toske

+0

@toske Jenkins服务器的输出指向代码'echo“的这一部分List = $ list”'您显示的是未排序的初始列表(排序不会改变输入列表,但会返回一个新排序列表)。 'rval'拥有这个新的排序列表。 –

回答

2

,你声明nonCpsTest作为一个变量,它引用到关闭的问题,所以@NonCPS不会在这种情况下工作

以下变种正常工作:

@NonCPS 
def nonCpsTest() { 
    def list = [ 
     ['CreationDate': '200'], 
     ['CreationDate': '300'], 
     ['CreationDate': '100'], 
    ] 
    def rval = list.sort{ it['CreationDate'] } 
    echo "Rval=$rval" 
    echo "List=$list" 
} 

node{ 
    nonCpsTest() 
} 
+1

谢谢,这与一点修改,使其声明式管道代码 - https://gist.github.com/toshke/c22e5b924f061cb067ae895accb0da32 – toske