Jenkins avait plus de 600 plugins, dans le système réel, nous sommes habitués à installer beaucoup de plugins.
Et parfois, nous voulons supprimer certains plugins pour rendre le système plus propre ou le remplacer par un autre plugin mature (nom différent).
Cela doit garantir que personne/aucun travail n'utilise ces plugins ou je dois les informer.
Existe-t-il des moyens dans la configuration ou quelque part dans le système Jenkins pour savoir si le plugin est utilisé par des travaux?
MISE À JOUR 2013 Sur la base de la réponse ci-dessous, je maintiens le mappage simple "plugin: mot-clé", comme
plugin_keys = {
"git":'scm class="hudson.plugins.git.GitSCM"',
"copyartifact":"hudson.plugins.copyartifact.CopyArtifact",
# and more
}
Et recherchez le mot clé du plugin dans le config.xml
, toutes les informations (plugins, jobs, config) peuvent être récupérées via jenkins remote API
ça marche pour moi.
MISE À JOUR 2014.04.26 Version plus récente de jenkins, il semble que le fichier config.xml soit modifié pour y avoir directement le nom du plugin
Comme
<com.coravy.hudson.plugins.github.GithubProjectProperty plugin="[email protected]">
<hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="[email protected]">
<hudson.plugins.disk__usage.DiskUsageProperty plugin="[email protected]"/>
<scm class="hudson.plugins.git.GitSCM" plugin="[email protected]">
Par conséquent, je vérifie simplement ce plugin="<plugin name>"
dans config.xml
, ça marche à nouveau
MISE À JOUR 2014.05.05
Voir le script complet dans Gist jenkins-stats.py
MISE À JOUR 2018.6.7
Il y a plugin d'utilisation du plugin supporte ceci (pas encore REST pour l'instant)
Voici 2 façons de trouver cette information.
Le plus simple est probablement de grep les fichiers de configuration du travail:
Par exemple. lorsque vous connaissez le nom de classe (ou le nom du package) de votre plugin (par exemple org.jenkinsci.plugins.unity3d.Unity3dBuilder):
find $JENKINS_HOME/jobs/ -name config.xml -maxdepth 2 | xargs grep Unity3dBuilder
Une autre consiste à utiliser quelque chose comme le plugin de scripteur , mais vous avez ensuite besoin de plus d'informations sur l'endroit où le plugin est utilisé dans la build.
import hudson.model.*
import hudson.maven.*
import hudson.tasks.*
for(item in Hudson.instance.items) {
//println("JOB : "+item.name);
for (builder in item.builders){
if (builder instanceof org.jenkinsci.plugins.unity3d.Unity3dBuilder) {
println(">>" + item.name.padRight(50, " ") + "\t UNITY3D BUILDER with " + builder.unity3dName);
}
}
}
}
Mise à jour : voici un petit script de scriplet qui pourrait vous aider à trouver les noms de classe appropriés. Il peut certainement être amélioré:
import jenkins.model.*;
import hudson.ExtensionFinder;
List<ExtensionFinder> finders = Jenkins.instance.getExtensionList(ExtensionFinder.class);
for (Finder in finders) {
println(">>> " + Finder);
if (Finder instanceof hudson.ExtensionFinder.GuiceFinder) {
println(Finder.annotations.size());
for (key in Finder.annotations.keySet()) {
println(key);
}
} else if (Finder instanceof Ruby.RubyExtensionFinder) {
println(Finder.parsedPlugins.size());
for (plugin in Finder.parsedPlugins) {
for (extension in plugin.extensions) {
println("Ruby wrapper for " + extension.instance.clazz);
}
}
} else if (Finder instanceof hudson.cli.declarative.CLIRegisterer) {
println(Finder.discover(Jenkins.instance));
for (extension in Finder.discover(Jenkins.instance)) {
println("CLI wrapper for " + extension.instance.class);
// not sure what to do with those
}
} else {
println("UNKNOWN Finder TYPE");
}
}
(Scriplet en ligne de ma soumission listJenkinsExtensions originale à http://scriptlerweb.appspot.com qui semble en panne)
N'oubliez pas de sauvegarder!
Début 2018, il existe un "Plugin Usage Plugin" qui vous donne une belle liste des plugins et où ils sont utilisés. Nous avons remarqué que, selon le système, il ne semble pas toujours attraper tous les plugins, mais cela donne une très belle liste des plugins et de tous les travaux liés à un plugin spécifique dans une liste extensible.
Je ne peux pas commenter car je n'ai pas assez de réputation, mais si je le pouvais, je ferais remarquer que le lien cassé fourni par coffeebreaks pour le petit script scriplet mentionné dans le accepté answer peut être trouvé sur Internet Archive, à ce lien:
https://web.archive.org/web/20131103111754/http://scriptlerweb.appspot.com/script/show/97001
En cas de rupture de ce lien, voici le contenu du script:
import jenkins.model.*;
import hudson.ExtensionFinder;
List<ExtensionFinder> finders = Jenkins.instance.getExtensionList(ExtensionFinder.class);
for (Finder in finders) {
println(">>> " + Finder);
if (Finder instanceof hudson.ExtensionFinder.GuiceFinder) {
println(Finder.annotations.size());
for (key in Finder.annotations.keySet()) {
println(key);
}
} else if (Finder instanceof Ruby.RubyExtensionFinder) {
println(Finder.parsedPlugins.size());
for (plugin in Finder.parsedPlugins) {
for (extension in plugin.extensions) {
println("Ruby wrapper for " + extension.instance.clazz);
}
}
} else if (Finder instanceof hudson.cli.declarative.CLIRegisterer) {
println(Finder.discover(Jenkins.instance));
for (extension in Finder.discover(Jenkins.instance)) {
println("CLI wrapper for " + extension.instance.class);
// not sure what to do with those
}
} else {
println("UNKNOWN Finder TYPE");
}
}
J'ai écrit ce travail Jenkins paramétré qui recherche les fichiers de configuration. Il vous suffit de savoir quelles balises le plugin génère dans le fichier de configuration et d'utiliser le nom de cette balise comme paramètre needle
:
cd $JENKINS_HOME
cd jobs
echo searching for $needle
find . -name config.xml -type f -exec grep $needle /dev/null {} \;