Jenkins有600个插件,在实际系统中,我们用来安装大量的插件。
有时,我们想删除一些插件,使系统更干净,或者用另一个成熟的插件(不同的名称)替换。
这需要确保没有人/没有工作使用这些插件,或者我需要通知他们。
在Jenkins系统的配置或某处是否有任何方法可以知道插件是否被任何作业使用?
更新2013基于下面的答案,我维护简单的“plugin:keyword”映射,如
plugin_keys = {
"git":'scm class="hudson.plugins.git.GitSCM"',
"copyartifact":"hudson.plugins.copyartifact.CopyArtifact",
# and more
}
并从config.xml
中搜索插件关键字,所有信息(插件,作业,配置)都可以通过jenkins远程API获取
它对我有用。
更新2014.04.26之后的jenkins版本,似乎是配置。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">
因此,我只需检查这个插件=”
更新日期2014.05.05
在要点jenkins-stats.py中查看完整的脚本
更新2018.6.7
有插件使用插件支持这个(还没有RESTAPI)
我不能发表评论,因为我没有足够的声誉,但如果可以,我想指出,coffeebreaks为接受答案中提到的小scriplet脚本提供的断开链接可以在互联网档案中找到,链接如下:
https://web.archive.org/web/20131103111754/http://scriptlerweb.appspot.com/script/show/97001
如果链接中断,以下是脚本的内容:
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");
}
}
截至2018年初,有一个“插件使用插件”,它为您提供了一个很好的插件列表以及它们在哪里使用。我们注意到,根据系统的不同,有时它似乎并没有抓住所有的插件,但是它提供了一个非常可爱的插件列表和与可扩展列表中的特定插件相关的所有作业。
https://plugins.jenkins.io/plugin-usage-plugin
管道脚本中使用的插件通常不会被列为作业使用的插件,因为它们是在Jenkins文件中动态使用的。
这里有两种方法可以找到这些信息。
最简单的方法可能是grep作业配置文件:
例如,当您知道插件的类名(或包名)(例如org.jenkinsci.plugins.unity3d.Unity3dBuilder)时:
find $JENKINS_HOME/jobs/ -name config.xml -maxdepth 2 | xargs grep Unity3dBuilder
另一种方法是使用scriptler插件,但是您需要更多关于插件在构建中的使用位置的信息。
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");
}
}
(内联脚本从我的原始列表Jenkins扩展提交到http://scriptlerweb.appspot.com似乎下降)
别忘了备份!
问题内容: Jenkins有600多个插件,在实际系统中,我们习惯于安装许多插件。 有时,我们想删除一些插件以使系统更干净,或替换为另一个成熟的插件(名称不同)。 这需要确保没有人/没有工作使用这些插件,否则我需要通知他们。 在Jenkins系统中是否有任何配置或方法可以知道该插件是否被任何作业使用? UPDATE 2013 根据以下答案,我维护简单的“ plugin:keyword”映射,例如
问题内容: 我试图在网上找到答案,但是找不到特定于实现的答案。 我可以选择,并进行了大量的业务,我想知道我怎么可以在它们之间进行选择? 我已阅读文档的onComplete和的onSuccess,但我可以从火力地堡文档,看这一个,例如,对于(如一个具体操作的示例操作),他们有时用,有时他们使用。 我怎么知道每种情况下哪个更好?有关系吗?考虑到我想知道每个操作是否成功。 问题答案: 顾名思义,将在任务
问题内容: 我正在使用拦截器在基于Struts的应用程序中实现一些功能,而对其生命周期的工作方式却感到困惑。根据Struts的文档(“拦截器”,“写拦截器”和“大图”),它应该像这样工作: 这是有道理的,但是我在如何区分在操作之前执行的拦截器调用与在结果呈现之后执行的拦截器调用之间进行了尝试(我在这里跳过了s)。 如果启动调试器,则会有两个调用, 并且在通过时找不到任何明显的内容 。 ( 更新 :
问题内容: 我想知道我是否在通话。 如果我正在通话,请启动服务(服务部分已清除)。我该怎么做呢? 参加通话时,我需要致电服务中心…我不知道该怎么做?有什么帮助吗? 问题答案: 您需要广播接收器… 在清单中声明广播接收器… 还声明使用权限… 广播接收器类… 还有一类可自定义电话状态侦听器…
问题内容: 我必须知道是String还是任何其他类类型,该怎么办?目前,我像下面那样做,但是它的编码不是很好。 问题答案: 是如果对象是或的子类 是仅当对象是一个
问题内容: 我制作的jQuery控件存在一些问题。假设您有一个下拉列表,可让您输入要查找的商品的ID,当您按ENTER键或在文本框中失去焦点时,它会通过jQuery验证您输入的ID是否正确,如果没有输入则显示警报没错 事实是,当普通用户在其中输入无效值并通过按下“提交”按钮失去焦点时,jQuery帖子将在发送表单提交后返回。 有什么方法可以检查jQuery是否处理了任何异步请求,从而不允许表单提交