55

Jenkins には 600 以上のプラグインがあり、実際のシステムでは、多くのプラグインをインストールするのに慣れています。

また、システムをよりクリーンにするためにいくつかのプラグインを削除したり、別の成熟したプラグイン (別の名前) に置き換えたりしたい場合もあります。

これにより、これらのプラグインを使用する人や仕事がないことを確認する必要があります。または、それらに通知する必要があります。

プラグインが任意のジョブで使用されているかどうかを確認するための構成または Jenkins システムのどこかに方法はありますか?

UPDATE 2013 以下の回答に基づいて、次のような単純な「プラグイン:キーワード」マッピングを維持します

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

gist jenkins-stats.pyで完全なスクリプトを参照してください

更新 2018.6.7

これをサポートするプラグインの使用プラグインがあります(まだ REST API はありません)

4

4 に答える 4

20

その情報を見つける方法は 2 つあります。

最も簡単な方法は、おそらくジョブ構成ファイルを grep することです。

たとえば、プラグインのクラス名 (またはパッケージ名) がわかっている場合 (例: org.jenkinsci.plugins.unity3d.Unity3dBuilder):

find $JENKINS_HOME/jobs/ -name config.xml -maxdepth 2 | xargs grep Unity3dBuilder

もう 1 つはscriptler plugin のようなものを使用することですが、ビルドでプラグインが使用されている場所に関する詳細情報が必要です。

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);
      }
    }
  }
}

更新: 関連するクラス名を見つけやすくする小さなスクリプトレット スクリプトを次に示します。それは確かに改善することができます:

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"); 
  }
}

(ダウンしているように見えるhttp://scriptlerweb.appspot.comへの私の元の listJenkinsExtensions 送信からのインライン スクリプトレット)

バックアップをお忘れなく!

于 2013-08-10T05:44:35.010 に答える
7

十分な評判がないためコメントできませんが、できれば、受け入れられた回答で言及されている小さなスクリプトレットスクリプトに対してコーヒーブレイクによって提供された壊れたリンクがインターネットアーカイブで見つかることを指摘したいと思います。リンク:

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"); 
  }
}
于 2015-11-17T16:10:32.997 に答える