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