Ich habe die meisten Jobs/Pipelines unseres Projektes in DSL ohne irgendeine vorherige groovy Erfahrung geschrieben, aber jetzt bin ich bei fortgeschritteneren Problem fest, das ich nicht herausfinden kann.Jenkins DSL generische mehrfache Förderungen
Ich versuche eine Methode zu implementieren, die 1,2, n Aktionen zu einem Job hinzufügen würde. Unten sehen Sie eine voll funktionsfähige Methode, die eine Promotion hinzufügen kann, und ich erwartete, dass es so funktioniert, dass ich die Methode nur zweimal aufrufen würde, wenn ich eine andere brauchte, aber dann stieß ich auf mein Problem wurde erstellt das neueste würde generiert werden.
/**
* @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])
}
}
}
}
}
}
}
}
}
So wie es funktionieren würde, aber wenn ich eine andere 'Förderung' Schließung wie diese, aber hinzugefügt, dieses Beispiel fast identisch erzeugen würde (Namen und Namen-1) Sonderangebote:
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])
}
}
}
}
}
}
}
}
}
Ist es möglich, Closures in irgendeiner Weise wiederzuverwenden und die Variablen von einer anderen Methode aus zu bevölkern? Oder irgendwelche anderen Ideen?
Ja ist es möglich, die Groovy Weise, dies zu tun würde sein, Ihre Beförderungen einer Liste iterate über dieser Liste hinzuzufügen, die das notwendige job-dsl aufruft, das Sie ausführen müssen. Ich werde am Wochenende eine vollständige Antwort geben. –
Es ist mir gelungen, eine Lösung zu finden, die dem ähnelt, was Sie gesagt haben, aber ich benutze stattdessen Objekte. Wie auch immer, fühlen Sie sich frei, Groovy Art, es für die Ästhetik und Lernen zu tun. – matijasx
War eine verrückte Woche! Apologeten, die noch nicht beantwortet haben. –