Jenkins有600多个插件,在实际系统中,我们习惯于安装许多插件。
有时,我们想删除一些插件以使系统更干净,或替换为另一个成熟的插件(名称不同)。
这需要确保没有人/没有工作使用这些插件,否则我需要通知他们。
在Jenkins系统中是否有任何配置或方法可以知道该插件是否被任何作业使用?
UPDATE 2013 根据以下答案,我维护简单的“ plugin:keyword”映射,例如
plugin_keys = { "git":'scm class="hudson.plugins.git.GitSCM"', "copyartifact":"hudson.plugins.copyartifact.CopyArtifact", # and more }
并从中搜索plugin关键字config.xml,所有信息(plugins,jobs,config)都可以通过jenkins远程API获取。
config.xml
这个对我有用。
UPDATE 2014.04.26 后来的jenkins版本,似乎config.xml更改为直接具有插件名称
喜欢
<com.coravy.hudson.plugins.github.GithubProjectProperty plugin="github@1.4"> <hudson.plugins.throttleconcurrents.ThrottleJobProperty plugin="throttle-concurrents@1.7.2"> <hudson.plugins.disk__usage.DiskUsageProperty plugin="disk-usage@0.18"/> <scm class="hudson.plugins.git.GitSCM" plugin="git@1.4.1-SNAPSHOT">
因此,我只是检查这个plugin="<plugin name>"中config.xml,它再次工作
plugin="<plugin name>"
更新2014.05.05
请参阅要点jenkins- stats.py中的完整脚本
更新2018.6.7
有插件使用插件支持(尚无REST API)
以下是找到该信息的两种方法。
最简单的方法可能是grep作业配置文件:
例如,当您知道插件的类名(或包名)(例如org.jenkinsci.plugins.unity3d.Unity3dBuilder)时:
find $JENKINS_HOME/jobs/ -name config.xml -maxdepth 2 | xargs grep Unity3dBuilder
另一种方法是使用脚本编辑器插件之类的工具,但是您需要有关该插件在构建中使用位置的更多信息。
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); } } } }
更新 :这是一个小的scriplet脚本,可以帮助您轻松找到相关的类名。当然可以改进:
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"); } }
(从我的原始列表JenkinsExtensions提交到http://scriptlerweb.appspot.com的内联scriplet 似乎已关闭)
不要忘记备份!