Cách nhận danh sách các plugin Jenkins đã cài đặt với cặp tên và phiên bản


159

Làm cách nào tôi có thể nhận được danh sách các plugin Jenkins đã cài đặt?

Tôi đã tìm kiếm tài liệu API truy cập từ xa của Jenkins, nhưng không tìm thấy. Tôi có nên sử dụng CLI của Jenkins không? Có một tài liệu hoặc ví dụ?

Câu trả lời:


160

Bạn có thể truy xuất thông tin bằng cách sử dụng Jenkins Script Console có thể truy cập bằng cách truy cập http://<jenkins-url>/script. (Cho rằng bạn đã đăng nhập và có quyền yêu cầu).

Ảnh chụp màn hình của Bảng điều khiển Script

Nhập tập lệnh Groovy sau để lặp lại các plugin đã cài đặt và in ra các thông tin liên quan:

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

Nó sẽ in danh sách kết quả như thế này (cắt bớt):

SSccam của đầu ra tập lệnh

Giải pháp này tương tự như một trong những câu trả lời ở trên là nó sử dụng Groovy, nhưng ở đây chúng tôi đang sử dụng bảng điều khiển kịch bản thay thế. Bảng điều khiển kịch bản cực kỳ hữu ích khi sử dụng Jenkins.

Cập nhật

Nếu bạn thích một danh sách được sắp xếp, bạn có thể gọi sortphương thức này :

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

Điều chỉnh Đóng theo ý thích của bạn (ví dụ ở đây, nó được sắp xếp theo shortName, trong ví dụ này được sắp xếp theo DisplayName)


2
Trong tất cả các câu trả lời, đây là cách hữu ích nhất để nộp báo cáo lỗi plugin; nó có thể được thực hiện bằng giao diện người dùng web tiêu chuẩn và đưa ra kết quả ở định dạng có thể dễ dàng dán vào trường "Môi trường".
Aaron D. Marasco

8
Câu trả lời tuyệt vời để nhanh chóng tạo một plugininsins cho docker Jenkins!
Erik Englund

1
Có thể hữu ích khi thêm sắp xếp sao cho danh sách các plugin phù hợp: Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
wheleph

1
Đây là câu trả lời chúng tôi đã chuyển sang cục bộ thay vì đề xuất XPath của tôi ở trên, được gói bằng một yêu cầu cuộn tròn và một số cách cắt tỉa được xây dựng từ các plugin nguồn, chúng tôi sử dụng phương pháp này để tạo plugin cho hình ảnh docker của chúng tôi như được đề cập bởi @ErikEnglund ở trên 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
Các loại không hoạt động, đó là một bản đồ không thể thay đổi những ngày này. Sử dụng:jenkins.model.Jenkins.instance.getPluginManager().getPlugins().stream().sorted().each { println "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }
Ed Randall

96

Những ngày này, tôi sử dụng cách tiếp cận tương tự như câu trả lời được mô tả bởi @Behe bên dưới thay vì https://stackoverflow.com/a353292719/1597808


Bạn có thể sử dụng API kết hợp với các đối số độ sâu, XPath và trình bao bọc.

Sau đây sẽ truy vấn API của pluginManager để liệt kê tất cả các plugin được cài đặt, nhưng chỉ trả về các thuộc tính shortName và phiên bản của chúng. Tất nhiên bạn có thể truy xuất các trường bổ sung bằng cách thêm '|' đến cuối tham số XPath và chỉ định mẫu để xác định nút.

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

Đối số trình bao bọc là bắt buộc trong trường hợp này, bởi vì nó trả về nhiều hơn một nút như một phần của kết quả, cả hai đều khớp với nhiều trường với XPath và nhiều nút plugin.

Có thể hữu ích khi sử dụng URL sau trong trình duyệt để xem thông tin nào về các plugin có sẵn và sau đó quyết định những gì bạn muốn giới hạn bằng XPath:

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

Xin chào, Bạn có biết làm thế nào để có được danh sách các plugin thực sự được sử dụng bởi các công việc của Jenkins và hệ thống Jenkins thay vì danh sách đầy đủ các plugin đã cài đặt không? Cảm ơn
dùng1164061

3
Hoạt động tốt với tôi trên Mac OS X. Tôi muốn chuyển đổi đầu ra thành một danh sách văn bản đơn giản, vì vậy đã sử dụng một số biểu thức Perl để loại bỏ các thẻ: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
Thay thế trong định dạng JSON:curl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
MarkHu

1
Tôi tin rằng điều này đòi hỏi đặc quyền quản trị, nhưng tôi không chắc chắn.
mkobit

2
Xác nhận rằng điều này đòi hỏi quyền quản trị viên theo tư vấn bảo mật 2016-05-11 .
mkobit

29

Jenkins 1,588 (2 nd tháng mười một, 2014) & 1,647 (4 ngày của tháng Hai, 2016)

  • Jenkins> Quản lý Jenkins

    nhập mô tả hình ảnh ở đây

  • Thông tin hệ thống

    nhập mô tả hình ảnh ở đây

  • bổ sung

    nhập mô tả hình ảnh ở đây


1
Điều này rất đơn giản và tôi có thể lấy danh sách từ máy chủ DEV và PRD, dán chúng vào Excel và so sánh các phiên bản của chúng cạnh nhau.
Jirong Hu

24

Jenkins CLI hỗ trợ liệt kê tất cả các plugin đã cài đặt:

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


Điều này sẽ không liệt kê trạng thái của plugin.
akhan 3/03/2015

1
list-pluginslệnh CLI không yêu cầu người dùng phải có quyền Tổng thể / RunScripts như groovylệnh này.
Jose Andias

Điều này dường như không hoạt động với mã thông báo API nếu người dùng / mã thông báo không phải là "Tổng thể / Quản trị viên".
Csseller

21

Sử dụng Jenkins CLI như thế này:

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

=trong cuộc gọi có nghĩa là 'đọc từ đầu vào tiêu chuẩn' . pluginEnumerator.groovy chứa mã Groovy sau:

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

Nếu bạn muốn chơi với mã, đây là tài liệu API Java của Jenkins .


@ user1284795, điều này có hữu ích không?
malenkiy_scot

1
Xin chào, bạn có biết làm thế nào để có được các plugin được sử dụng bởi hệ thống Jenkins và công việc của Jenkins thay vì cài đặt tất cả các plugin không? Tôi muốn điều này để giúp tôi gỡ cài đặt tất cả các plugin không sử dụng. Bất kỳ trợ giúp được đánh giá cao. Cảm ơn!
dùng1164061

Đây phải là câu trả lời được chấp nhận. @ user1164061, tôi không nghĩ có sự khác biệt nào giữa các plugin hiển thị cho một công việc so với máy chủ. Có một isActive()api mà bạn có thể sử dụng trong tập lệnh Groovy trong câu trả lời này để có được trạng thái của plugin. Xem javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive () .
akhan 3/03/2015

20

Nếu bạn đang làm việc trong môi trường docker và muốn xuất danh sách plugin theo định dạng plugins.txt để chuyển nó đến install_scripts.sh, hãy sử dụng các tập lệnh này trong http://{jenkins}/scriptbảng điều khiển:

  1. Phiên bản này hữu ích để có được phiên bản gói cụ thể
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
  1. Nếu bạn chỉ muốn plugin có phiên bản mới nhất, bạn có thể sử dụng plugin này (cảm ơn @KymikoLoco về mẹo này)
Jenkins.instance.pluginManager.plugins.each{
  plugin -> 
    println ("${plugin.getShortName()}:latest")
}

1
Nếu bạn muốn nhận phiên bản mới nhất của tất cả các plugin, bạn có thể mở rộng phiên bản này để chỉ lấy tên ngắn và thêm :latestvào cuối:println ("${plugin.getShortName()}:latest")
KymikoLoco

17

Các câu trả lời ở đây có phần chưa đầy đủ. Và tôi đã phải biên dịch thông tin từ các nguồn khác để thực sự có được danh sách plugin.

1. Nhận Jenkins CLI

Jenkins CLI sẽ cho phép chúng tôi tương tác với máy chủ Jenkins của chúng tôi từ dòng lệnh. Chúng ta có thể nhận được nó với một cuộc gọi curl đơn giản.

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

2. Tạo tập lệnh Groovy để phân tích cú pháp (nhờ malenkiy_scot)

Lưu lại như sau plugins.groovy.

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

3. Gọi API Jenkins để biết kết quả plugin

Gọi máy chủ Jenkins ( localhost:8080tại đây) với tên người dùng và mật khẩu đăng nhập của bạn trong khi tham khảo tập lệnh Groovy:

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

Đầu ra cho plugins.txt trông như thế này:

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

Các lệnh trên sẽ chạy trên máy trạm của bạn chứ không phải trong công việc Jenkins
user3740244

Lệnh dường như dẫn đến "LRI: ẩn danh bị thiếu quyền Tổng thể / Đọc" trong các phiên bản mới nhất .. thay vào đó, hãy chuyển auth trước khi làm việc cho tôi java -jar jenkins-cli.jar -s localhost: 8080 -auth "admin: < mật khẩu> "groovy = <plugins.groovy
prasanna

12

Câu trả lời của Behe với các plugin sắp xếp không hoạt động trên máy Jenkins của tôi. Tôi đã nhận được lỗi java.lang.UnsupportedOperationExceptiondo cố gắng sắp xếp một bộ sưu tập bất biến tức là Jenkins.instance.pluginManager.plugins. Sửa lỗi đơn giản cho mã:

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

Sử dụng http://<jenkins-url>/scriptURL để chạy mã.


1
Tôi cũng sử dụng một phiên bản khác của Jenkins so với hệ thống đầu tiên tôi đã thử nghiệm. Đối với v2.81, câu trả lời hàng đầu đã hoạt động, nhưng đối với LTS v2.83.x và bất kỳ phiên bản mới hơn nào, nó đã đưa ra lỗi mà bạn đã đề cập trong khi mã của bạn vẫn hoạt động.
dragon788

1
Một điều tôi chỉ nhận thấy là bạn đang sắp xếp dựa trên displayNamekhi in ra shortName, điều này rất khó hiểu vì một số plugin không theo thứ tự bảng chữ cái cho cả hai và nó dẫn đến một danh sách không xuất hiện được sắp xếp. Thay đổi it.displayNameđể it.shortNamegiải quyết điều này độc đáo.
dragon788

8

Nếu bạn là quản trị viên Jenkins, bạn có thể sử dụng trang thông tin hệ thống Jenkins:

http://<jenkinsurl>/systemInfo

/systeminfokhông hoạt động (HTTP 404) trên Jenkins 1.594
G. Lombard

7
Hãy thử - một http://localhost:8080/systemInfosố máy chủ có phân biệt chữ hoa chữ thường. Cũng lưu ý rằng nó yêu cầu người dùng hiện đang đăng nhập phải có quyền Tổng thể / Quản trị.
MarkHu

8

Với curljq:

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

Lệnh này cung cấp đầu ra ở định dạng được sử dụng bởi plugins.txttệp Jenkins đặc biệt cho phép bạn cài đặt trước các phụ thuộc (ví dụ: trong hình ảnh docker):

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

Ví dụ về plugins.txt: https://github.com/hoto/jenkinsfile-examples/blob/master/source/jenkins/usr/share/jenkins/plugins.txt


5

Từ trang chủ Jenkins:

  1. Nhấp vào Quản lý Jenkins .
  2. Nhấp vào Quản lý bổ trợ .
  3. Nhấp vào tab Đã cài đặt .

Hoặc là

  1. Truy cập trực tiếp URL Jenkins: {URL cơ sở Jenkins của bạn} / pluginManager / đã cài đặt

1
Trang "plugin đã cài đặt" không nhất thiết phản ánh trạng thái plugin thực sự. Ví dụ: bạn có thể kích hoạt lại plugin và xem plugin đã được kiểm tra, trong khi plugin vẫn bị vô hiệu hóa cho đến khi Jenkins-Restart. Do đó, các giải pháp 100% duy nhất là http: // <jenkinsurl> / systeminfo và các câu trả lời truy vấn API, imho.
t0r0X

4

Chia sẻ tùy chọn khác được tìm thấy ở đây với thông tin đăng nhập

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/ /:/'

như trên, nhưng không có các phiên bản, và được sắp xếp. 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

3

Tôi muốn một giải pháp có thể chạy trên master mà không có bất kỳ yêu cầu xác thực nào và không thấy nó ở đây. Tôi đã tạo một tập lệnh bash nhanh sẽ lấy ra tất cả các phiên bản từ thư mục bổ trợ.

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
james dupont

2

Tôi nghĩ rằng đây không phải là câu trả lời đủ tốt ... nhiều câu hỏi liên quan đến một vài bước bổ sung. Đây là cách tôi đã làm nó.

sudo apt-get install jq

... bởi vì đầu ra JSON cần được tiêu thụ sau khi bạn gọi API.

#!/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

Một tùy chọn khác cho người dùng Python:

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

Nếu Jenkins chạy trong thùng chứa Jenkins Docker, bạn có thể sử dụng dòng lệnh này trong 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

Đối với Jenkins phiên bản 2.125 sau đây đã hoạt động.

LƯU Ý: Thay thế các phần có tên USERNAME và APIKEY bằng Tên người dùng và APIKey hợp lệ cho người dùng tương ứng đó. Khóa API cho người dùng khả dụng thông qua Quản lý người dùngChọn người dùng → Tùy chọn khóa API .

Bạn có thể phải kéo dài giấc ngủ nếu quá trình cài đặt Jenkins của bạn mất nhiều thời gian hơn để bắt đầu.

Việc bắt đầu yum update -ycũng sẽ nâng cấp phiên bản nếu bạn cài đặt Jenkins bằng yum.

#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

Có rất nhiều cách để lấy thông tin này nhưng tôi viết hai cách như sau: -

1. Lấy clen jenkins.

CLI jenkins sẽ cho phép chúng ta tương tác với máy chủ jenkins của chúng ta từ dòng lệnh. Chúng ta có thể nhận được nó với một cuộc gọi curl đơn giản.

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

2. Tạo một kịch bản Groovy. HOẶC từ bảng điều khiển kịch bản jenkins

Chúng ta cần tạo một kịch bản hấp dẫn để phân tích thông tin chúng ta nhận được từ API jenkins. Điều này sẽ xuất ra mỗi plugin với phiên bản của nó. Lưu các mục sau dưới dạng plugins.groovy.

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


0

Bạn cũng có thể quan tâm những bản cập nhật có sẵn cho plugin. Để làm được điều đó, bạn phải hợp nhất dữ liệu về các plugin đã cài đặt với thông tin về các bản cập nhật có sẵn tại đây https://updates.jenkins.io/cản/update-center.json .

Để phân tích tệp đã tải xuống dưới dạng JSON, bạn phải đọc trực tuyến dòng thứ hai (rất lớn).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.