how can I know whether the plugin is used by any jobs in jenkins how can I know whether the plugin is used by any jobs in jenkins jenkins jenkins

how can I know whether the plugin is used by any jobs in jenkins


Here are 2 ways to find that information.

The easiest is probably to to grep the job config files:

E.g. when you know the class name (or package name) of your plugin (e.g. org.jenkinsci.plugins.unity3d.Unity3dBuilder):

find $JENKINS_HOME/jobs/ -name config.xml -maxdepth 2 | xargs grep Unity3dBuilder

Another is to use something like the scriptler plugin, but then you need more information about where the plugin is used in the 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);      }    }  }}

Update: here's a small scriplet script that might ease you finding the relevant class names. It can certainly be improved:

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");   }}

(inlined scriplet from my original listJenkinsExtensions submission to http://scriptlerweb.appspot.com which seems down)

Don't forget to backup!


As of early 2018 there is a "Plugins Usage Plugin" that gives you a nice list of the plugins and where they are used. We've noticed that depending on the system sometimes it doesn't seems to catch all the plugins, but it gives a really lovely list of the plugins and all jobs related to a specific plugin in an expandable list.

https://plugins.jenkins.io/plugin-usage-plugin

Plugins used in pipeline scripts would not be listed normally as used by jobs, because they are used dynamically in Jenkinsfiles.


I can't comment because I don't have enough reputation, but if I could, I would point out that the broken link provided by coffeebreaks for the small scriplet script mentioned in the accepted answer can be found on the Internet Archive, at this link:

https://web.archive.org/web/20131103111754/http://scriptlerweb.appspot.com/script/show/97001

In case that link breaks, here is the content of the 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");   }}