delivery - ¿Cómo puedo saber si el plugin es usado por cualquier trabajo en Jenkins?
jenkins online (3)
A principios de 2018, hay un "Complemento de uso de complementos" que le brinda una buena lista de los complementos y dónde se usan. Hemos notado que, dependiendo del sistema, a veces no parece captar todos los complementos, pero ofrece una lista realmente encantadora de los complementos y todos los trabajos relacionados con un complemento específico en una lista ampliable.
Jenkins tenía más de 600 complementos, en el sistema real, estamos acostumbrados a instalar muchos complementos.
Y a veces, queremos eliminar algunos complementos para hacer que el sistema esté más limpio o reemplazarlo por otro plugin maduro (nombre diferente).
Esto necesita asegurarse de que ningún trabajo / ningún trabajo use esos complementos o necesito notificarlos.
¿Hay alguna forma en la configuración o en algún lugar del sistema Jenkins para saber si el plugin es utilizado por algún trabajo?
ACTUALIZACIÓN 2013 Basado en la respuesta a continuación, mantengo el mapeo simple "plugin: keyword", como
plugin_keys = {
"git":''scm class="hudson.plugins.git.GitSCM"'',
"copyartifact":"hudson.plugins.copyartifact.CopyArtifact",
# and more
}
Y busque la palabra clave del complemento desde config.xml
, toda la información (complementos, trabajos, configuración) se puede obtener a través de la API remota de jenkins.
esto funciona para mi.
ACTUALIZACIÓN 2014.04.26 Después de la versión de jenkins, parece que el config.xml ha cambiado para tener el nombre del complemento allí directamente
Me gusta
<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]">
Por lo tanto, simplemente compruebo este plugin="<plugin name>"
en config.xml
, funciona de nuevo
ACTUALIZACIÓN 2014.05.05
Ver el guión completo en la esencia jenkins-stats.py
ACTUALIZACIÓN 2018.6.7
Hay un complemento de uso de complementos que admite esto (todavía no hay API REST)
Aquí hay 2 formas de encontrar esa información.
Lo más fácil es probablemente para grep los archivos de configuración de trabajo:
Por ejemplo, cuando conoces el nombre de clase (o nombre del paquete) de tu complemento (por ejemplo, org.jenkinsci.plugins.unity3d.Unity3dBuilder):
find $JENKINS_HOME/jobs/ -name config.xml -maxdepth 2 | xargs grep Unity3dBuilder
Otra es usar algo como el complemento de scriptler , pero luego necesita más información sobre dónde se usa el complemento en la compilación.
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);
}
}
}
}
Actualización : aquí hay un pequeño script scriplet que puede facilitar la búsqueda de los nombres de clase relevantes. Sin duda se puede mejorar:
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 incorporado de mi lista originalJenkinsExtensions submit to http://scriptlerweb.appspot.com que parece estar abajo)
¡No te olvides de hacer una copia de seguridad!
No puedo comentar porque no tengo suficiente reputación, pero si pudiera, señalaría que el enlace roto proporcionado por coffeebreaks para el pequeño script scriplet mencionado en la respuesta aceptada se puede encontrar en el Archivo de Internet, en este enlazar:
https://web.archive.org/web/20131103111754/http://scriptlerweb.appspot.com/script/show/97001
En caso de que ese enlace se rompa, aquí está el contenido del guión:
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");
}
}