当前位置: 首页 > 面试题库 >

我怎么知道该插件是否被jenkins中的任何作业使用

鲜于致远
2023-03-14
问题内容

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获取。

这个对我有用。

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,它再次工作

更新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
似乎已关闭)

不要忘记备份!



 类似资料:
  • Jenkins有600个插件,在实际系统中,我们用来安装大量的插件。 有时,我们想删除一些插件,使系统更干净,或者用另一个成熟的插件(不同的名称)替换。 这需要确保没有人/没有工作使用这些插件,或者我需要通知他们。 在Jenkins系统的配置或某处是否有任何方法可以知道插件是否被任何作业使用? 更新2013基于下面的答案,我维护简单的“plugin:keyword”映射,如 并从中搜索插件关键字,

  • 问题内容: 我想在管道作业中使用EnvInject插件。因此,我可以设置复选框“为运行准备一个环境”,但是 没有动作“注入环境变量”,就像在自由式作业中一样。我在“属性内容”块中声明了变量:在此处输入图片说明 如何使用EnvInject在管道作业中注​​入环境变量? 问题答案: 如果在“属性内容”块中声明了以下变量: 然后,您可以将它们放入管道中,以便:

  • 问题内容: 我试图在网上找到答案,但是找不到特定于实现的答案。 我可以选择,并进行了大量的业务,我想知道我怎么可以在它们之间进行选择? 我已阅读文档的onComplete和的onSuccess,但我可以从火力地堡文档,看这一个,例如,对于(如一个具体操作的示例操作),他们有时用,有时他们使用。 我怎么知道每种情况下哪个更好?有关系吗?考虑到我想知道每个操作是否成功。 问题答案: 顾名思义,将在任务

  • 我想使它从“游戏26”类到“游戏39”类,如果用户经历了从“游戏17”类到“游戏18”类。但如果用户没有通过,要使从“Game26”类到“Game30”类。

  • 问题内容: 我制作的jQuery控件存在一些问题。假设您有一个下拉列表,可让您输入要查找的商品的ID,当您按ENTER键或在文本框中失去焦点时,它会通过jQuery验证您输入的ID是否正确,如果没有输入则显示警报没错 事实是,当普通用户在其中输入无效值并通过按下“提交”按钮失去焦点时,jQuery帖子将在发送表单提交后返回。 有什么方法可以检查jQuery是否处理了任何异步请求,从而不允许表单提交

  • 问题内容: 我必须知道是String还是任何其他类类型,该怎么办?目前,我像下面那样做,但是它的编码不是很好。 问题答案: 是如果对象是或的子类 是仅当对象是一个