이름과 버전 쌍으로 설치된 Jenkins 플러그인 목록을 얻는 방법


159

설치된 Jenkins 플러그인 목록을 얻으려면 어떻게해야합니까?

Jenkins Remote Access API 문서를 검색했지만 찾을 수 없습니다. Jenkins의 CLI를 사용해야합니까? 문서 나 예가 있습니까?

답변:


161

를 방문하여 액세스 할 수 있는 Jenkins 스크립트 콘솔 을 사용하여 정보를 검색 할 수 있습니다 http://<jenkins-url>/script. (로그인하고 필요한 권한을 가지고 있음).

스크립트 콘솔의 스크린 샷

다음 Groovy 스크립트 를 입력하여 설치된 플러그인을 반복하고 관련 정보를 인쇄하십시오.

Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}

다음과 같이 결과 목록이 인쇄됩니다 (클리핑).

스크립트 출력 스크린 샷

이 솔루션은 Groovy를 사용한다는 점에서 위의 답변 중 하나 와 비슷 하지만 여기서는 스크립트 콘솔을 대신 사용합니다. 스크립트 콘솔은 Jenkins를 사용할 때 매우 유용합니다.

최신 정보

정렬 된 목록을 선호하는 경우이 sort메소드를 호출 할 수 있습니다 .

def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
  plugin -> 
    println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}

원하는대로 클로저를 조정하십시오 (예 : 여기에서는 shortName으로 정렬되며, 예에서는 DisplayName으로 정렬 됨).


2
모든 답변 중에서 플러그인 버그 보고서를 제출할 때 가장 유용합니다. 표준 웹 UI를 사용하여 수행 할 수 있으며 "환경"필드에 쉽게 붙여 넣을 수있는 형식으로 결과를 제공합니다.
Aaron D. Marasco

8
docker Jenkins를 위해 plugins.txt를 신속하게 생성하기위한 훌륭한 답변입니다!
Erik Englund

1
플러그인 목록이 일관되도록 정렬을 추가하는 것이 유용 할 수 있습니다. Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
wheleph

1
이것은 위의 XPath 제안 대신 로컬로 전환했으며 컬 요청으로 래핑되고 소스 플러그인에서 빌드 일부 정리는 위의 @ErikEnglund가 언급 한 것처럼이 접근법을 사용하여 도커 이미지에 대한 plugins.txt를 생성합니다. echo 'script=Jenkins.instance.pluginManager.plugins.each{ plugin -> println ("${plugin.getShortName()}:${plugin.getVersion()}") } null' \ | no_proxy=localhost curl --netrc --silent --data-binary @- -X POST "http://localhost:8080/jenkins/scriptText" | sort > plugins.txt
dbailey

8
정렬이 작동하지 않습니다. 요즘 수정할 수없는지도입니다. 사용 :jenkins.model.Jenkins.instance.getPluginManager().getPlugins().stream().sorted().each { println "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }
Ed Randall

96

요즘 나는 https://stackoverflow.com/a/35292719/1597808 대신 @Behe에 설명 된 답변과 동일한 접근법을 사용합니다.


깊이, XPath 및 랩퍼 인수와 함께 API를 사용할 수 있습니다.

다음은 pluginManager의 API를 쿼리하여 설치된 모든 플러그인을 나열하지만 shortName 및 version 속성 만 리턴합니다. 물론 '|'를 추가하여 추가 필드를 검색 할 수 있습니다 XPath 매개 변수의 끝에 노드를 식별하기위한 패턴을 지정하십시오.

wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins

이 경우 래퍼 인수가 필요합니다. 여러 개의 필드가 XPath 및 여러 플러그인 노드와 일치한다는 점에서 결과의 일부로 둘 이상의 노드를 반환하기 때문입니다.

브라우저에서 다음 URL을 사용하여 사용 가능한 플러그인 정보를 확인한 다음 XPath를 사용하여 제한 할 항목을 결정하는 것이 좋습니다.

http://<jenkins>/pluginManager/api/xml?depth=1

안녕하세요, 설치된 플러그인의 전체 목록이 아닌 Jenkins 작업 및 Jenkins 시스템에서 실제로 사용하는 플러그인 목록을 얻는 방법을 알고 있습니까? 감사합니다
user1164061

3
Mac OS X에서 잘 작동했습니다. 출력을 일반 텍스트 목록으로 변환하고 싶었으므로 Perl 정규식을 사용하여 태그를 제거했습니다.curl 'http://192.168.197.133:8080/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins' | perl -pe 's/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1 \2\n/g'
G. Lombard

8
JSON 형식의 대안 :curl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
MarkHu

1
관리 권한이 필요하지만 확실하지 않습니다.
mkobit

2
2016-05-11 보안 권고에 따라 관리자 권한이 필요하다는 것을 확인했습니다 .
mkobit

29

젠킨스 1.588 (2 11 월 2014 년) 1.647 (4 월, 2016)

  • 젠킨스> 젠킨스 관리

    여기에 이미지 설명을 입력하십시오

  • 시스템 정보

    여기에 이미지 설명을 입력하십시오

  • 플러그인

    여기에 이미지 설명을 입력하십시오


1
이것은 매우 간단하며 DEV 및 PRD 서버에서 목록을 가져 와서 Excel에 붙여 넣고 버전을 나란히 비교할 수 있습니다.
Jirong Hu

24

Jenkins CLI는 설치된 모든 플러그인 나열을 지원합니다.

java -jar jenkins-cli.jar -s http://localhost:8080/ list-plugins


플러그인 상태는 표시되지 않습니다.
akhan

1
그리고 list-pluginsCLI 명령은 사용자가 명령 과 같이 전체 / 런 스크립트 권한 을 갖도록 요구 groovy하지 않습니다.
José Andias

사용자 / 토큰이 "전체 / 관리자"가 아닌 경우 API 토큰과 함께 작동하지 않는 것 같습니다.
cgseller

21

다음과 같이 Jenkins CLI를 사용하십시오.

java -jar jenkins-cli.jar -s http://[jenkins_server] groovy = < pluginEnumerator.groovy

=호출에서 '표준 입력에서 읽기'를 의미 합니다. pluginEnumerator.groovy 는 다음 Groovy 코드를 포함합니다.

println "Running plugin enumerator"
println ""
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()} - ${it.getVersion()}"}
println ""
println "Total number of plugins: ${plugins.size()}"

코드를 사용하려면 Jenkins Java API 문서가 있습니다.


@ user1284795, 이것이 도움이 되었습니까?
malenkiy_scot

1
안녕하세요, 모든 플러그인을 설치하는 대신 Jenkins 시스템 및 Jenkins 작업에서 사용하는 플러그인을 얻는 방법을 알고 있습니까? 사용하지 않는 모든 플러그인을 제거하는 데 도움이되기를 원합니다. 도움을 주시면 감사하겠습니다. 감사!
user1164061

이것이 정답입니다. @ user1164061, 나는 작업과 서버에 보이는 플러그인 사이에 차이점이 있다고 생각하지 않습니다. isActive()플러그인의 상태를 얻기 위해이 답변의 groovy 스크립트에 사용할 수 있는 API가 있습니다. javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive ()를 참조하십시오 .
akhan

20

도커 환경에서 작업하고 플러그인 목록을 plugins.txt 형식으로 출력하여 install_scripts.sh에 전달하려면 http://{jenkins}/script콘솔 에서 다음 스크립트를 사용하십시오 .

  1. 이 버전은 특정 패키지 버전을 얻는 데 유용합니다
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
  1. 최신 버전의 플러그인 만 원한다면 이것을 사용할 수 있습니다 (팁에 @KymikoLoco 감사합니다)
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:latest")
}

1
모든 플러그인의 최신 버전을 얻으려면 짧은 이름 만 가져 :latestprintln ("${plugin.getShortName()}:latest")
와서

17

여기에 대한 답변은 다소 불완전했습니다. 그리고 실제로 플러그인 목록을 얻기 위해 다른 소스의 정보를 컴파일해야했습니다.

1. Jenkins CLI 받기

Jenkins CLI를 사용하면 명령 줄에서 Jenkins 서버와 상호 작용할 수 있습니다. 간단한 컬 호출로 얻을 수 있습니다.

curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar

2. 파싱을위한 Groovy 스크립트 생성 (malenkiy_scot 덕분에)

다음을로 저장하십시오 plugins.groovy.

def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}

3. 플러그인 결과를 위해 Jenkins API 호출

localhost:8080Groovy 스크립트를 참조하면서 로그인 사용자 이름과 비밀번호로 Jenkins 서버 ( 여기)를 호출하십시오 .

java -jar jenkins-cli.jar -s http://localhost:8080 groovy --username "admin" --password "admin" = < plugins.groovy > plugins.txt

plugins.txt의 출력은 다음과 같습니다.

ace-editor: 1.1
ant: 1.5
antisamy-markup-formatter: 1.5
authentication-tokens: 1.3
blueocean-autofavorite: 1.0.0
blueocean-commons: 1.1.4
blueocean-config: 1.1.4
blueocean-dashboard: 1.1.4
blueocean-display-url: 2.0
blueocean-events: 1.1.4
blueocean-git-pipeline: 1.1.4
blueocean-github-pipeline: 1.1.4
blueocean-i18n: 1.1.4
blueocean-jwt: 1.1.4
blueocean-personalization: 1.1.4
blueocean-pipeline-api-impl: 1.1.4
blueocean-pipeline-editor: 0.2.0
blueocean-pipeline-scm-api: 1.1.4
blueocean-rest-impl: 1.1.4

위의 명령은 워크 스테이션이 아닌 젠킨스 작업에서 실행해야합니다
user3740244

이 명령은 최신 버전에서 "오류 : 익명의 전체 / 읽기 권한이 누락되었습니다"로 표시됩니다. 대신 나를 위해 작업하기 전에 인증을 전달 java -jar jenkins-cli.jar -s localhost : 8080 -auth "admin : < password> "groovy = <plugins.groovy
prasanna

12

플러그인 정렬에 대한 Behe의 답변 이 Jenkins 컴퓨터에서 작동하지 않았습니다. java.lang.UnsupportedOperationException불변의 컬렉션을 정렬하려고했기 때문에 오류가 발생했습니다 Jenkins.instance.pluginManager.plugins. 코드의 간단한 수정 :

List<String> jenkinsPlugins = new ArrayList<String>(Jenkins.instance.pluginManager.plugins);
jenkinsPlugins.sort { it.displayName }
              .each { plugin ->
                   println ("${plugin.shortName}:${plugin.version}")
              }

http://<jenkins-url>/scriptURL을 사용하여 코드를 실행하십시오.


1
필자는 테스트 한 첫 번째 시스템과 다른 버전의 Jenkins를 사용 하여이 문제를 해결했습니다. v2.81의 경우 최고 답변이 작동했지만 LTS v2.83.x 및 최신 버전의 경우 코드가 여전히 작동하는 동안 언급 한 오류가 발생했습니다.
dragon788

1
방금 주목 한 것은 displayName을 인쇄 하는 동안 기반으로 정렬하고 있다는 것입니다. shortName일부 플러그인은 알파벳순으로 동일하지 않으므로 정렬되지 않은 목록이 표시됩니다. 이것을 잘 해결하기 it.displayName위해 변경하십시오 it.shortName.
dragon788

8

Jenkins 관리자 인 경우 Jenkins 시스템 정보 페이지를 사용할 수 있습니다.

http://<jenkinsurl>/systemInfo

/systeminfoJenkins 1.594에서 작동하지 않습니다 (HTTP 404)
G. Lombard

7
시도- http://localhost:8080/systemInfo일부 서버는 대소 문자를 구분합니다. 또한 현재 로그인 한 사용자에게 전체 / 관리자 권한이 있어야합니다.
MarkHu

8

curljq:

curl -s <jenkins_url>/pluginManager/api/json?depth=1 \
  | jq -r '.plugins[] | "\(.shortName):\(.version)"' \
  | sort

이 명령은 plugins.txt종속성을 사전 설치 (예 : 도커 이미지) 할 수있는 특수 Jenkins 파일에서 사용하는 형식으로 출력을 제공합니다 .

ace-editor:1.1
ant:1.8
apache-httpcomponents-client-4-api:4.5.5-3.0

plugins.txt: https://github.com/hoto/jenkinsfile-examples/blob/master/source/jenkins/usr/share/jenkins/plugins.txt


5

Jenkins 홈페이지에서 :

  1. Jenkins 관리를 클릭 하십시오 .
  2. 플러그인 관리를 클릭 하십시오 .
  3. 설치된 탭을 클릭 하십시오.

또는

  1. Jenkins URL로 바로 이동 : {Jenkins 기본 URL} / pluginManager / installed

1
"설치된 플러그인"페이지는 반드시 실제 플러그인 상태를 반영하지는 않습니다. 예를 들어 플러그인을 다시 활성화하고 플러그인을 확인한 반면 Jenkins-Restart까지 플러그인은 여전히 ​​비활성화되어 있습니다. 따라서 유일한 100 % 솔루션은 http : // <jenkinsurl> / systeminfo이며 API 쿼리는 imho입니다.
t0r0X

4

여기에 있는 다른 옵션 을 자격 증명과 공유

JENKINS_HOST=username:password@myhost.com:port
curl -sSL "http://$JENKINS_HOST/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1 \2\n/g'|sed 's/ /:/'

위와 같지만 버전이 없으며 정렬되었습니다. curl -sSL "http://127.0.0.1:8080/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins" | perl -pe 's/.*?<shortName>([\w-]+).*?<version>([^<]+)()(<\/\w+>)+/\1 \n/g' | sort
ffghfgh 2016 년

3

인증 요구 사항없이 마스터에서 실행할 수있는 솔루션을 원했지만 여기서 보지 못했습니다. 플러그인 디렉토리에서 모든 버전을 가져 오는 빠른 bash 스크립트를 만들었습니다.

if [ -f $JENKINS_HOME/plugin_versions.txt ]; then
  rm $JENKINS_HOME/plugin_versions.txt
fi

for dir in $JENKINS_HOME/plugins/*/; do
  dir=${dir%*/}
  dir=${dir##*/}
  version=$(grep Plugin-Version $JENKINS_HOME/plugins/$dir/META-INF/MANIFEST.MF | awk -F': ' '{print $2}')
  echo $dir $version >> $JENKINS_HOME/plugin_versions.txt
done

grep Plugin-Version */META-INF/MANIFEST.MF | sed -e 's!/META-INF/MANIFEST.MF:Plugin-Version: !:!g' > ../plugins2.txt
제임스 듀폰

2

나는 이것들이 충분하지 않다고 생각한다. 내가 한 방법은 다음과 같습니다.

sudo apt-get install jq

... API를 호출 한 후 JSON 출력을 사용해야하기 때문에.

#!/bin/bash
server_addr = 'jenkins'
server_port = '8080'

curl -s -k "http://${server_addr}:${server_port}/pluginManager/api/json?depth=1" \
  | jq '.plugins[]|{shortName, version,longName,url}' -c | sort \
  > plugin-list

echo "dude, here's your list: "
cat plugin-list

1

파이썬 사용자를위한 또 다른 옵션 :

from jenkinsapi.jenkins import Jenkins

#get the server instance
jenkins_url = 'http://<jenkins-hostname>:<jenkins-port>/jenkins'
server = Jenkins(jenkins_url, username = '<user>', password = '<password>')

#get the installed plugins as list and print the pairs
plugins_dictionary = server.get_plugins().get_plugins_dict()
for key, value in plugins_dictionary.iteritems():
    print "Plugin name: %s, version: %s" %(key, value.version)

1
# list of plugins in sorted order
# Copy this into your Jenkins script console
    def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()

    List<String> list = new ArrayList<String>()

    i = 0
    plugins.each {
      ++i
      //println " ${i}  ${it.getShortName()}: ${it.getVersion()}"
      list.add("${it.getShortName()}: ${it.getVersion()}")
    }

    list.sort{it}
    i = 0
    for (String item : list) {
      i++
      println(" ${i} ${item}")
    }


0

Jenkins가 Jenkins Docker 컨테이너에서 실행되는 경우 Bash에서이 명령 행을 사용할 수 있습니다.

java -jar /var/jenkins_home/war/WEB-INF/jenkins-cli.jar -s http://localhost:8080/ list-plugins --username admin --password `/bin/cat /var/jenkins_home/secrets/initialAdminPassword`

0

Jenkins 버전 2.125의 경우 다음이 작동했습니다.

참고 : USERNAME 및 APIKEY라는 섹션을 해당 사용자의 유효한 UserName 및 APIKey로 바꾸십시오. 사용자의 API 키는 사용자 관리사용자 선택API 키 옵션을 통해 사용할 수 있습니다.

Jenkins 설치를 시작하는 데 시간이 오래 걸리면 절전 모드를 연장해야 할 수도 있습니다.

yum update -yyum을 사용하여 Jenkins를 설치 한 경우 시작시 버전도 업그레이드됩니다.

#JENKINS AUTO UPDATE SCRIPT link this script into a cron
##############
!/bin/bash
sudo yum update -y
sleep 120
UPDATE_LIST=$( sudo /usr/bin/java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -auth [USERNAME:APIKEY] -s http://localhost:8080/ list-plugins | grep -e ')$' | awk '{ print $1 }' );
if [ ! -z "${UPDATE_LIST}" ]; then
    echo Updating Jenkins Plugins: ${UPDATE_LIST};
    sudo /usr/bin/java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -auth [USERNAME:APIKEY] -s http://localhost:8080/ install-plugin ${UPDATE_LIST};
    sudo /usr/bin/java -jar /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar -auth [USERNAME:APIKEY] -s http://localhost:8080/ safe-restart;
fi
##############

0

이 정보를 가져 오는 방법은 많이 있지만 다음과 같이 두 가지 방법을 쓰고 있습니다.

1. 젠킨스 진료소를 가져옵니다.

jenkins CLI를 사용하면 명령 줄에서 jenkins 서버와 상호 작용할 수 있습니다. 간단한 컬 호출로 얻을 수 있습니다.

curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar

2. 그루비 스크립트를 작성하십시오. 또는 젠킨스 스크립트 콘솔에서

jenkins API에서 수신 한 정보를 구문 분석하려면 groovy 스크립트를 작성해야합니다. 각 플러그인의 버전이 출력됩니다. 다음을 plugins.groovy로 저장하십시오.

def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins() plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.