如何列出所有未使用的Jenkins插件?

23

我正在寻找一种方法来检查哪些Jenkins插件没有被使用。 到目前为止,我发现可以查找具有属性pluginconfig.xml文件中的标签,然后将其与plugins目录中列出的标签进行比较。 但这并不能给我完整的列表。仍然有一些像role-strategy这样的插件不在那里。

我使用类似下面的Python代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
import glob
from lxml import etree as ET
from collections import defaultdict

def find(name, path):
    return glob.glob(path+'/jobs/*/'+name)


def get_plugin_list(path):
    return [x[:-4].split('/')[-1] for x in glob.glob(path+'/plugins/*.jpi')]


if __name__ == "__main__":
    jobs_dict = defaultdict(list)
    plugins_all = set(get_plugin_list('/home/user/.jenkins')
    for config in find('config.xml', '/home/user/.jenkins'):
        with open(config) as f:
            tree = ET.XML(f.read())
            plugins = tree.xpath("/project//@plugin")
        job = config.split('/')[-2]
        for p in plugins:
            jobs_dict[p].append(job)
    with open('/home/user/.jenkins/config.xml') as f:
        tree = ET.XML(f.read())
        plugins_config = tree.xpath("/hudson//@plugin")
    plugins_used = set([x.split('@')[0] for x in jobs_dict.keys()+plugins_config])
    print "######## All plugins\n", '\n'.join(plugins_all)
    print "######## Used plugins\n", '\n'.join(plugins_used)
    print "######## Unused plugins\n", '\n'.join(plugins_all - plugins_used)
3个回答

35
有一个专门处理这个问题的Jenkins插件: 插件使用 多亏了这个神奇的插件,我找到了许多可以在插件管理器中删除的冗余插件(您将能够删除没有依赖关系的插件)。
插件界面在Jenkins侧边栏上有一个链接。它列出了所有在现有作业中具有扩展点的插件(点击展开按钮查看哪些作业),以及全局插件。

enter image description here enter image description here

更新:现在支持管道作业(感谢Ian W)

1
哇!太棒了,确实是个不错的插件 :-) 非常感谢您发布它 :-) - mastier
1
@master 太好了。如果它回答了你的问题,请用V字标记它,谢谢;) - Noam Manos
当安装插件时,它会安装几个依赖项插件。此列表显示了零计数的依赖插件。因此,我不能盲目地删除所有显示为零使用的插件。你如何处理这个问题? - user1164061
7
插件使用我认为插件使用插件并不是非常有用,因为它不能检测来自管道作业的插件使用情况。几个月前我安装了这个插件,但它只报告说我已安装的100个插件中只有4个被使用了,但我知道这是不正确的。后来我发现他们自己的文档也承认了这一点:"在管道脚本中使用的插件通常不会列在作业使用的插件列表中,因为它们在Jenkinsfiles中动态使用。" - timblaktu
1
@NoamManos,没有必要从最佳答案中删除内容,但你可能希望更新一下,以表明它支持管道,并且UI报告被分成了不同的部分,用于特定作业插件和全局/系统插件;非常有帮助。你可能需要更新一下图片。 - Ian W
显示剩余2条评论

3
有些插件只会影响Jenkins系统配置,而不是单独的任务;您可以通过更改代码中的查找方法来包含/home/user/.jenkins/config.xml以找到这些插件。
许多插件在$JENKINS_HOME下有自己的配置文件,例如$JENKINS_HOME/org.jenkinsci.plugins.p4.PerforceScm.xml。我没有深入研究过,但您可能可以通过在config.xml文件中搜索插件名称(例如PerforceSCM),而不是“插件”一词,来找到一些额外的插件使用情况。
此外,如果您只想搜索启用的作业,则可以过滤掉其config.xml中包含"true"的作业。

0
如果您需要检查已安装但已禁用的插件列表,可以在插件管理器中检查“已安装”选项卡。
未选中的是已禁用的插件。

Jenkins installed plugin list


谢谢,但这不是我要找的,我想列出所有未在作业中使用的插件。我知道其中一些是全局使用的,有办法区分吗?这是问题所在。 - mastier
你可以尝试使用以下URL http://10.157.137.17:8010/view/viewName/job/jobNm/config.xml 读取工作配置文件。请将viewname和job name替换为您自己的。 使用正则表达式过滤插件。查找 plugin= - Gautam Jose
谢谢您的想法。我不知道我可以通过http访问xml。但这是我一开始提供的第一个解决方案。 - mastier
你能分享一下列出作业中未使用插件的实际需求吗?只是好奇。 - Gautam Jose
1
@GautamJose 一个例子是在通过迁移升级Jenkins时,不想浪费迁移(无论手动还是自动化)未使用的插件所花费的精力。一些商店不幸地慢慢地给越来越多的人管理员权限,因此你最终会得到一堆人测试插件并放弃那些他们认为没用的插件。 - JohnZaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接