Я написал большинство заданий/конвейеров нашего проекта на DSL без какого-либо предыдущего опыта работы с groovy, но теперь я застрял на более сложной проблеме, которую не могу понять.
Я пытаюсь реализовать метод, который добавил бы 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])
}
}
}
}
}
}
}
}
}
Можно ли каким-то образом повторно использовать замыкания и, возможно, заполнить переменные другим методом? Или есть другие идеи?