Comment obtenir une liste de course jenkins construit via un script groovy?
Est-il possible d'obtenir une liste de COURSE construit dans Jenkins via un Système de Script Groovy?
J'ai essayé une boucle par le occupé exécuteurs, mais à partir d'un exécuteur de l'objet, je n'arrive pas à construire l'objet:
def busyExecutors = Jenkins.instance.computers
.collect {
c -> c.executors.findAll { it.isBusy() }
}
.flatten() //reminder: transforms list(list(executor)) into list(executor)
busyExecutors.each { e ->
println('=====print out methods of executor object=======');
println e.metaClass.methods*.name.sort().unique();
}
Je peux aussi cibler le TRAVAIL que je me suis intéressé dans de la sorte:
def item = hudson.model.Hudson.instance.getItem("my_job");
println item.metaClass.methods*.name.sort().unique();
Mais ensuite je me boucle dans 100s (si pas plus), construit et demander à chacun de construire si elles sont en cours d'exécution.
Il y a un moyen plus facile/mieux d'obtenir une liste de course construit.
Il y a beaucoup d'informations sur la façon de faire différentes choses via le Système de Scripts Groovy (dont certains que j'ai écrit), mais je ne peux pas comprendre comment obtenir une liste de course: les versions de
Comment obtenir la tâche en cours d'exécution du nom de nœud dans jenkins à l'aide de groovy
https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+Script+Console
https://gist.github.com/dnozay/e7afcf7a7dd8f73a4e05
_getRuns()
Astuce
import jenkins.model.Jenkins
en haut du script.OriginalL'auteur grayaii | 2016-10-28
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé un couple de façons de le faire sans l'aide de l'API REST ou de l'analyse XML:
Cela suppose que vous n'avez pas supprimé ou modifié la valeur par défaut "Tous" afficher dans Jenkins. Bien sûr, vous pouvez le substituer par un autre nom de la vue si vous savez exactement qui voient votre construit dans. Ou vous pouvez essayer cette approche:
Bien que cette approche ne nécessite pas un nom de vue, il comporte aussi des limites. Ne pas descendre dans les dossiers ou Multibranch Pipelines ou quelque chose comme ça. Vous devez manuellement descendre dans des dossiers ou de concocter un moyen de le faire automatiquement. Par exemple, voici une version qui fonctionne pour un Multibranch Pipeline:
Je pense qu'il y a peut être une méthode plus précise pour utilisation de
build.getResult().equals(null)
pour déterminer si une construction est en cours ou pas, mais je vais avoir du mal à trouver la bonne API docs, donc je ne suis pas sûr. Ce n'était que la première méthode que j'ai trouvé à l'aide de l'objet de l'introspection qui ont travaillé.Encore en raison du manque de API docs, je ne sais pas si il y a une différence significative entre les
Jenkins.instance.getItems()
que j'ai utilisé ici etJenkins.instance.getAllItems()
qui a été utilisé dans cette réponse.Enfin, notez qu'ils sont tous relativement méthodes inefficaces. Ils itérer sur chaque version de chaque tâche, de sorte que si vous enregistrez une longue histoire de construit (le réglage par défaut est de sauver une histoire de seulement 10 construit par emploi) ou ont des milliers d'emplois, ce qui peut prendre un certain temps à s'exécuter. Voir Comment puis-je Efficacement liste **** actuellement des travaux en cours d'exécution sur Jenkins à l'aide de Groovy pour une question qui demande comment faire ce travail plus efficacement.
OriginalL'auteur jayhendren
Ce n'est pas particulièrement efficace (mais BEAUCOUP plus efficace que l'utilisation de l'API). Il permet d'imprimer tous actuellement en cours d'exécution se renforce avec un lien HTML. Peut être exécuté dans le script de la console ou via scriptler.
OriginalL'auteur Steven the Easily Amused
Vous pouvez utiliser l'API REST pour obtenir la liste des running est construit. L'aide de la suivre url:
http://myjenkins/jenkins/computer/api/xml?depth=1
Vous obtiendrez le suivi de réponse qui contient
<executor>
éléments. Seulement de course construit a un<url>
élément à l'intérieur d'<executor>
. Notez également que de course construit a<idle>false</idle>
valeur:Donc d'utiliser l'API REST avec un XPath pour
url
pour obtenir seulement le fonctionnement s'appuie (notez que&wrapper
paramètre est le nom de l'élément xml racine pour éviter les erreurs lors de la XPath correspond pas ou renvoie plus d'un nœud):Vous obtiendrez quelque chose comme:
Donc dans Groovy vous pouvez OBTENIR le RESTE de l'API, parse le Xml retourné, puis appliquer une expression régulière pour chaque
<url>
pour obtenir les données à partir de l'exécution: les versions deOriginalL'auteur albciff