我寫過大部分項目的工作/管道在DSL沒有任何以前的常規體驗,但現在我卡在更高級的問題,我無法弄清楚。Jenkins DSL通用多重促銷
我試圖實施一種方法,將1,2,n促銷活動添加到工作。 下面你可以看到一個可以添加一個促銷的完整工作方法,我期望它能夠以這樣的方式工作,如果我需要另一個促銷,我只需調用該方法兩次,但是然後我遇到了我的問題 - 只有提升被創建的最新版本將生成。
/**
* @param job DSL job object
* @param promotionName Name of the promotion
* @param nextJobs Comma seperated string of jobs to trigger when promotion is executed
* @param deployers Comma seperated string IDs that can execute promotion
* @param params Array of parameters to pass to the next job [0] = key, [1] = value.
*/
static void addPromotion(def job, String promotionName, String nextJobs, String deployers, String[][] params){
job.properties {
promotions {
promotion {
name(promotionName)
icon("star-gold")
conditions {
manual(deployers)
}
actions {
downstreamParameterized {
trigger(nextJobs) {
parameters {
for (String[] param : params){
predefinedProp(param[0]+"=",param[1])
}
}
}
}
}
}
}
}
}
它的工作,但是,如果我說這樣的另一個「促銷」關閉,然而,這個例子將產生幾乎相同(名稱和名稱-1)促銷方式:
static void addPromotion(def job, String promotionName, String nextJobs, String deployers, String[][] params){
job.properties {
promotions {
promotion {
name(promotionName)
icon("star-gold")
conditions {
manual(deployers)
}
actions {
downstreamParameterized {
trigger(nextJobs) {
parameters {
for (String[] param : params){
predefinedProp(param[0]+"=",param[1])
}
}
}
}
}
}
promotion {
name("${promotionName}-1")
icon("star-gold")
conditions {
manual(deployers)
}
actions {
downstreamParameterized {
trigger(nextJobs) {
parameters {
for (String[] param : params){
predefinedProp(param[0]+"=",param[1])
}
}
}
}
}
}
}
}
}
是否有可能以某種方式重新使用閉包,並從不同的方法填充變量?還是其他想法?
是的,有可能,Groovy的做法是將您的促銷活動添加到列表中,並在該列表中迭代調用必要的工作 - dsl,您需要運行。我會在週末提供完整的答案。 –
我設法想出了一個與您所說的類似的解決方案,但我使用的是對象。但是,請隨時提供Groovy的審美和學習方法。 – matijasx
去過一個瘋狂的一週! Apols尚未回答。 –