2017-06-06 77 views
6

我有一個名爲buildall它看起來像這樣的流水線作業:詹金斯管道傳遞的所有參數到下游的工作

pipeline { 
    stages { 
     stage("job1") { 
      build job: "job1" 
     } 
    } 
} 

buildall作業有25個參數。我想通過所有buildall的參數降至job1。有沒有一種簡單的方法可以做到這一點,而不是手動指定每個參數?

在這個問題:Pipeline pass parameters to downstream jobs 子有人問,但從來沒有回答:甚至更​​好,有沒有我可以只通過所有管道參數到下游的工作不太麻煩的方式。

這就是我的問題。

回答

6

以下似乎工作(我沒有測試過廣泛的雖然):

pipeline { 
    agent any 
    parameters { 
     string(name: 'PARAM1', description: 'Param 1?') 
     string(name: 'PARAM2', description: 'Param 2?') 
    } 
    stages { 
     stage('Example') { 
      steps { 
       echo "${params}" 
       script { 
        def myparams = currentBuild.rawBuild.getAction(ParametersAction).getParameters() 
        build job: 'downstream-pipeline-with-params', parameters: myparams 
       }  
      } 
     } 
    } 
} 

缺點:訪問rawBuild和的getAction您必須禁用溝沙箱或下管理詹金斯在詹金斯批准這些簽名>進程內腳本批准。該對話框將向您顯示您可能引入了安全漏洞。所以如果你想要承擔這個風險,這取決於你的環境。

+0

謝謝@Philip!有用。沒有你的幫助,我不會想出來的。 –

+0

他們爲什麼要這樣做?他們有一組奇怪的* ParameterValue類,用於調用構建,但不會將整個集合暴露給當前構建?我從這個Jenkins Pipelines開始,但我想推遲它,特別是當有特定的用例傳遞管道中不支持的「當前構建參數」時 – lqbweb

0

如果你不關心的參數類型,這種做法不需要禁用Groovy的沙盒 - 它簡單地假定所有參數都可以視爲字符串(不會爲「文件」工作爲例):

def myparams = params.collect{ 
    string(name: it.key, value: it.value) 
} 
build job: 'downstream-job', parameters: myparams 

它不會是太難擴大的邏輯來處理預定的非字符串參數類型,但我認爲,這不應該是必要的。更好的方法是以build()DSL閉包所需的格式公開參數,包括當前通過「params」全局變量不可見的類型細節,或者可能添加布爾值,例如:

// I wish: 
build job: 'downstream-job', includeMyParameters: true, parameters: anyExtras 
// I wish: 
build job: 'downstream-job', includeMyParameters: true, parameters: anyExtras