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ụ?
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:
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ậ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):
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 sort
phươ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)
Jenkins.instance.pluginManager.plugins.sort({it.getDisplayName()}).each{ plugin -> println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}") }
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
jenkins.model.Jenkins.instance.getPluginManager().getPlugins().stream().sorted().each { println "${it.getShortName()} | ${it.getVersion()} | ${it.getDisplayName()}" }
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
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'
curl -s -k "http://jenkins/pluginManager/api/json?depth=1" | jq '.plugins[]|{shortName, version,longName}' -c
Jenkins 1,588 (2 nd tháng mười một, 2014) & 1,647 (4 ngày của tháng Hai, 2016)
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
list-plugins
lệnh CLI không yêu cầu người dùng phải có quyền Tổng thể / RunScripts như groovy
lệnh này.
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 .
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 () .
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}/script
bảng điều khiển:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:latest")
}
:latest
vào cuối:println ("${plugin.getShortName()}:latest")
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.
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
Lưu lại như sau plugins.groovy
.
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}
Gọi máy chủ Jenkins ( localhost:8080
tạ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â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.UnsupportedOperationException
do 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>/script
URL để chạy mã.
displayName
khi 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.shortName
giải quyết điều này độc đáo.
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
/systeminfo
không hoạt động (HTTP 404) trên Jenkins 1.594
http://localhost:8080/systemInfo
số 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ị.
Với curl
và jq
:
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.txt
tệ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
Từ trang chủ Jenkins:
Hoặc là
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/ /:/'
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
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
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
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)
# 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}")
}
Có một bảng liệt kê tất cả các plugin được cài đặt và chúng có được bật hay không tại http: // jenkins / systemInfo
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`
Đố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ùng → Chọ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 -y
cũ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
##############
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()}"}
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).