2017-03-19 47 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分支。

即使您之前有stage,但在script塊中,您調用getJobs()並將其添加到綁定中,也會拋出相同的錯誤消息。

在這種情況下,您必須重新使用腳本管道。

+1

雖然這不是我想聽到的 - 至少這是我可以使用的東西。謝謝。 – fredrik