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