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

后端 未结 4 808
天涯浪人
天涯浪人 2021-01-31 07:39

Jenkins had 600+ plugins, in the real system, we are used to install lots of plugins.

And sometimes, we want to remove some plugins to make system more clean or replace

4条回答
  •  暗喜
    暗喜 (楼主)
    2021-01-31 08:16

    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 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!

提交回复
热议问题