2017-10-16 13 views
0

Je suis en train de configurer gradle en utilisant init.groovy avec le code suivant:Jenkins - configurer l'installation en utilisant gradle groovy

def instance = Jenkins.getInstance() 
def gradle_inst_exists = false 
def gradle4 = new hudson.plugins.gradle.GradleInstallation("grade4", "/usr/share/gradle", []) 
def gradleInstallationDescriptor = instance.getDescriptorByType(hudson.plugins.gradle.GradleInstallation.DescriptorImpl) 
def installations = gradleInstallationDescriptor.getInstallations() 
println(installations.size()) 
installations.each { 
    installation = (hudson.plugins.gradle.GradleInstallation) it 
    if (gradle4.getName() == installation.getName()) { 
    gradle_inst_exists = true 
    println("found installation") 
    } 
} 
if (!gradle_inst_exists) { 
    installations.add(gradle4) 
    gradleInstallationDescriptor.setInstallations(installations) 
    gradleInstallationDescriptor.save() 
} 

Et je reçois l'erreur suivante:

groovy.lang.MissingMethodException: No signature of method: [Lhudson.plugins.gradle.GradleInstallation;.add() is applicable for argument types: (hudson.plugins.gradle.GradleInstallation) values: [GradleInstallation[grade4]] 
Possible solutions: any(), any(groovy.lang.Closure), wait(), min(), last(), sum() 

battons mon tête contre le mur en essayant de fixer le code. Toute aide serait grandement appréciée.

Répondre

0

Je n'ai pas de Jenkins à la main pour confirmer, mais d'ici, il semble que vous essayez de add à Array et non List. En regardant ce qui semble être la source pour getInstallations, il renvoie un GradleInstallation[] plutôt que List<GradleInstallation> comme peut-être que vous supposez.

Groovy supporte de each() tableaux, obligeamment (en général):

groovy> [1,2,3].toArray().each { print "Got $it." } 
Got 1.Got 2.Got 3 

Ainsi, lorsque vous essayez de modifier le tableau, vous aurez besoin de le faire avec des tableaux, ce qui est généralement horrible. Le plus facile est de convertir probablement à une liste (avec toList:

def installations = gradleInstallationDescriptor.getInstallations().toList() 

puis ajoutez votre nouvel élément comme avant (ou utilisez << si vous préférez), puis reconvertir en un tableau avant d'appeler le poseur:

gradleInstallationDescriptor.setInstallations((GradleInstall‌​ation[]) installations) 

Quelques bonnes connaissances en Groovy- Difference between List, ArrayList and Object Array

Hope qui aide

+0

J'ai fait les changements que vous avez suggéré, mais maintenant les erreurs de script sur le ' setInstallations'. 'groovy.lang.MissingMethodException: Aucune signature de la méthode: hudson.plugins.gradle.GradleInstallation $ DescriptorImpl.setInstallations() est applicable pour les types d'arguments: ([Ljava.lang.Object;) values: [[GradleInstallation [grade4]] ] solutions possibles: setInstallations ([Lhudson.tools.ToolInstallation;), setInstallations ([Lhudson.plugins.gradle.GradleInstallation;), getInstallations(), getInstallations() ' – BurritoBoy

+0

Je suppose que vous aurez besoin de jeter un' GradleInstallation [] ', ou bien définir explicitement la liste sous la forme' List ' – declension

+0

Résolu! Changement 'def installations = gradleInstallationDescriptor.getInstallations(). ToList()' et ajout de cast 'gradleInstallationDescriptor.setInstallations ((GradleInstallation []) installations)' Pouvez-vous corriger votre réponse pour que je puisse la marquer? – BurritoBoy