2016-07-27 87 views
1

我確實有一個管道p1,配置了3個參數,param1作爲ChoiceParam,param2和param3作爲runParameters,它們檢索不同的構建標識以將它們作爲版本傳遞。從DSL內執行Jenkins管道

我也有其他管道,p2,我想從中運行p1。 p2也有相同的參數配置,所以,在dsl裏面,我需要調用p1與params1,params2,params3,因爲參數應該繼承在p2

但我無法,因爲我已經嘗試任何一種我能想到的方式。 任何人都可以幫助我嗎?

p2: 
build() { 
    job('p1') 
    parameters([[$class:'StringParameterValue', name:'param1', value:${param1}], 
       [$class:'StringParameterValue', name:'param2', value:${param2}], 
       [$class:'StringParameterValue', name:'param3', value:${param3}] 
    ]) 
} 

然後,也試過

p2: 
build(job:'p1', parameters: ([[$class:'StringParameterValue', name:'param1', value:${param1}], 
      [$class:'StringParameterValue', name:'param2', value:${param2}], 
      [$class:'StringParameterValue', name:'param3', value:${param3}] 
])) 

沒有成功。請幫忙嗎?

回答

1

您是否確實需要將p1定義爲完整的獨立作業?我認爲將管道工作連鎖起來不是一個好習慣,就像我們過去使用自由式工作一樣。 相反,您應該加載另一個包含您的p1任務的管線文件,然後從p2中調用p1的已定義函數。這裏是a good example from the doc

基本上你需要做的就是定義p1作爲管道文件p1.groovy什麼:

def p1Actions(param1, param2, param3) { 
    // Do whatever p1 does with your 3 params 
} 

return this; 

然後就是從p2叫它:

pipeline = load 'p1.groovy' 
pipeline.p1Actions() 

如果你想P1受到重用從p2以外的其他作業中,只需將其推入自己的SCM回購庫,並在加載腳本之前將SCM結帳添加到前面的示例。順便說一下,這一步也很好地覆蓋了in the documentation