我写过大部分项目的工作/管道在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尚未回答。 –