11
votes

Jenkins / Hudson CLI API pour modifier les étiquettes de nœuds à l'aide de Groovy

Est-ce que quelqu'un sait comment modifier les étiquettes Jenkins / Hudson Node de manière non manuelle? Je veux dire, une API minutieuse comme l'API CLI que cet outil offre (sans redémarrer Jenkins / Hudson bien sûr).

Je suppose que la meilleure option consiste à utiliser un script groovy pour entrer dans les courants Jenkins / Hudson. Exécuter quelque chose comme: p>

java -jar -s hudson_url: 8080 groovy /path/to/groovy.groovyleight/provy.groovyleight/p >

being Le contenu de ce script quelque chose comme: p>

for (aSlave in hudson.model.Hudson.instance.slaves) {
   labels = aSlave.getAssignedLabels()
   println labels
   **aSlave.setLabel("blabla")** // this method doesn't exist, is there any other way???
}


0 commentaires

3 Réponses :


1
votes

Je n'ai pas encore vu un moyen de changer l'étiquette des esclaves non plus.

J'ai pris pour éditer le fichier principal config.xml et émettre un rechargement de la CLI.

Ceci a ses propres problèmes, cependant - tous les emplois en cours sont perdus jusqu'au prochain redémarrage de Jenkins - voir https://issues.jenkins-ci.org/browse/jenkins-3265


0 commentaires

10
votes

Remarque: les autres réponses sont un peu anciennes, il est donc possible que l'API soit apparue depuis lors.

Les étiquettes de nœud sont accessibles dans l'API comme une seule chaîne, comme dans l'écran de configuration. P >

lire et écrire des étiquettes: nœud.getlabelstring () et nœud.setlabelstring (String) . P>

Notez que vous pouvez également obtenir les étiquettes efficaces via: NODE.GETAUSIGNEDLABELLABILES () , qui renvoie une collection de labelatom comportant des étiquettes calculées de manière dynamique telle que" l'auto-étiquette "(représentant le nom du nœud lui-même).

Enfin, ces méthodes sur le nœud classe sont directement accessible de l'esclave Objets également, par exemple En tant que script Système Groovy: P>

hudson = hudson.model.Hudson.instance
hudson.slaves.findAll { it.nodeName.equals("slave4") }.each { slave -> 
  print "Slave  $slave.nodeName : Labels: $slave.labelString"
  slave.labelString = slave.labelString + " " + "offline"
  println "   --> New labels: $slave.labelString"
}
hudson.save()


8 commentaires

Comment et où dirais-je ce script? En outre, il semble qu'il y ait une extra} à la fin.


Cela n'apparaît pas comme si ces changements persistent, cependant.


Je n'ai pas réalisé cela, mais vous êtes correct. Avez-vous trouvé un moyen (une API) pour avoir fait cela par hasard?


hudson.model.hudson.instance.save ()


Je ne connais pas Groovy mais cet extrait semble toujours erroné - a une inégalation } et ne fonctionne pas dans Jenkins.


En effet, la corset était à l'écart, je l'ai supprimée et cela devrait résoudre le problème que vous rencontrez. Merci!


Ce script est toujours buggy: il modifie les étiquettes de Tous esclaves au lieu d'utiliser uniquement slave4 .


Hmm, tu as raison @hagello! J'ai réécrit l'extrait pour faire le changement que sur Slave4.



2
votes

J'ai trouvé un moyen de faire cela à l'aide du plug-in Groovy PostBuild.

J'ai un travail Jenkins qui prend quelques paramètres (nodetoupdate, labelname, désié estate) et exécute ce contenu dans le plug-in Groovy PostBuild: xxx


1 commentaires

Merci beaucoup! aidez-moi beaucoup !! parfaitement sans erreur.