2017-09-21 6 views
0

Jenkins 파이프 라인의 개체 목록을 정렬하려고합니다. 젠킨스 서버에 난 동안Jenkins Pipelines의 정렬 목록 나열

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() 
       } 
      } 
     } 
    } 
} 

내가 로컬 끝내 쉘을 사용하여이 스크립트를 실행 (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 

다음 점점 젠킨스 어쨌든 불변의리스트를 만드는 작업 흐름, 또는 오버라이드 (override) sort 방법이며, 만약 그렇다면, 내가 작업을 수행하는 방법 Jenkins 파이프 라인 코드 내에서 정렬 된 장소 목록?

+0

당신은'사용할 수 있어야합니다 rval', 맞죠? – Rao

+0

"가장 높은"날짜를 가진 요소로 목록에서 가장 어린 요소를 가져 오려고합니다. Rval은 젠킨스와 콘솔에서 다른 동작을 보여주는 디버깅 목적으로 만 사용됩니다. – toske

+0

@toske 젠킨스 서버의 출력물이이 코드 부분을 가리 킵니다.'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