2017-03-19 1 views
1

매개 변수를 통해 구성 가능한 숫자 작업을 병렬로 수행하는 선언 파이프 라인을 만들려고하지만 병렬 파트에 문제가 있습니다.선언적 파이프 라인에서 동적 단계의 동적 수

는 기본적으로, 어떤 이유로 아래의 파이프 라인은 오류를

Nothing to execute within stage "Testing" @ line .., column .. 

를 생성하고 그 이유를, 또는 그 해결 방법을 알아낼 수 없습니다.

import groovy.transform.Field 
@Field def mayFinish = false 

def getJob() { 
    return { 
     lock("finiteResource") { 
      waitUntil { 
       script { 
        mayFinish 
       } 
      } 
     } 
    } 
} 

def getFinalJob() { 
    return { 
     waitUntil { 
      script { 
       try { 
        echo "Start Job" 
        sleep 3 // Replace with something that might fail. 
        echo "Finished running" 
        mayFinish = true 
        true 
       } catch (Exception e) { 
        echo e.toString() 
        echo "Failed :(" 
       } 
      } 
     } 
    } 
} 

def getJobs(def NUM_JOBS) { 
    def jobs = [:] 
    for (int i = 0; i < (NUM_JOBS as Integer); i++) { 
     jobs["job{i}"] = getJob() 
    } 
    jobs["finalJob"] = getFinalJob() 
    return jobs 
} 

pipeline { 
    agent any 
    options { 
     buildDiscarder(logRotator(numToKeepStr:'5')) 
    } 
    parameters { 
     string(
      name: "NUM_JOBS", 
      description: "Set how many jobs to run in parallel" 
     ) 
    } 
    stages { 
     stage('Setup') { 
      steps { 
       echo "Setting it up..." 
      } 
     } 
     stage('Testing') { 
      steps { 
       parallel getJobs(params.NUM_JOBS) 
      } 
     } 
    } 
} 

나는 기존의 파이프 라인에 이렇게 많은 예,하지만 선언적하지 봤어요. 누구나 내가 뭘 잘못하고 있는지 알아?

+0

왜 줄 번호를 제거하고 있습니까? 그렇게 유용한 정보가 아닌가요? 최소한의 예를 시도해 보셨습니까? – StephenKing

답변

2

현재 선언 파이프 라인을 사용할 때 parallel 브랜치를 동적으로 제공하는 것은 불가능합니다.

이전에 script 블록에 stage 블록이 있고 getJobs()을 호출하여 바인딩에 추가 한 경우에도 동일한 오류 메시지가 발생합니다.

이 경우에는 스크립트 파이프 라인을 사용해야합니다.

+1

내가 듣고 싶지 않은 동안 - 적어도 내가 함께 일할 수있는 것입니다. 감사. – fredrik

관련 문제