আমি কীভাবে ইনস্টল করা জেনকিন্স প্লাগইনগুলির একটি তালিকা পেতে পারি?
আমি জেনকিন্স রিমোট অ্যাক্সেস এপিআই নথিটি সন্ধান করেছি, কিন্তু এটি পাওয়া যায় নি। আমার কি জেনকিন্সের সিএলআই ব্যবহার করা উচিত? কোন দলিল বা উদাহরণ আছে?
আমি কীভাবে ইনস্টল করা জেনকিন্স প্লাগইনগুলির একটি তালিকা পেতে পারি?
আমি জেনকিন্স রিমোট অ্যাক্সেস এপিআই নথিটি সন্ধান করেছি, কিন্তু এটি পাওয়া যায় নি। আমার কি জেনকিন্সের সিএলআই ব্যবহার করা উচিত? কোন দলিল বা উদাহরণ আছে?
উত্তর:
আপনি জেনকিন্স স্ক্রিপ্ট কনসোল ব্যবহার করে তথ্যটি পুনরুদ্ধার করতে পারেন যা পরিদর্শন করার মাধ্যমে অ্যাক্সেসযোগ্য http://<jenkins-url>/script
। (প্রদত্ত যে আপনি লগ ইন করেছেন এবং প্রয়োজনীয় অনুমতি রয়েছে)।
ইনস্টল হওয়া প্লাগইনগুলির পুনরাবৃত্তি করতে এবং সম্পর্কিত তথ্যটি মুদ্রণ করতে নিম্নলিখিত গ্রোভি স্ক্রিপ্টটি প্রবেশ করুন:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
এটি ফলাফলের তালিকাটি এইভাবে মুছে ফেলবে (ক্লিপড):
এই সমাধানগুলি গ্রোভি ব্যবহার করে উপরের যে কোনও একটি উত্তরের সমান , তবে এখানে আমরা এর পরিবর্তে স্ক্রিপ্ট কনসোল ব্যবহার করছি। স্ক্রিপ্ট কনসোল জেনকিন্স ব্যবহার করার সময় অত্যন্ত সহায়ক।
হালনাগাদ
আপনি যদি সাজানো তালিকাকে পছন্দ করেন তবে আপনি এই sort
পদ্ধতিটি কল করতে পারেন :
def pluginList = new ArrayList(Jenkins.instance.pluginManager.plugins)
pluginList.sort { it.getShortName() }.each{
plugin ->
println ("${plugin.getDisplayName()} (${plugin.getShortName()}): ${plugin.getVersion()}")
}
আপনার পছন্দ অনুসারে সমাপ্তি সামঞ্জস্য করুন (যেমন এখানে এটি শর্টনাম অনুসারে বাছাই করা হয়েছে, উদাহরণস্বরূপ এটি প্রদর্শন নাম অনুসারে বাছাই করা হয়েছে)
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()}" }
এই দিনগুলিতে আমি নীচে @Behe দ্বারা বর্ণিত উত্তর হিসাবে একই পন্থাটি ব্যবহার করছি https://stackoverflow.com/a/35292719/1597808
আপনি গভীরতা, এক্সপাথ এবং মোড়ক যুক্তিগুলির সংমিশ্রণে API ব্যবহার করতে পারেন।
নিম্নলিখিতটি প্লাগইন ম্যানেজারের এপিআইকে জিজ্ঞাসা করবে সমস্ত ইনস্টল থাকা প্লাগইনগুলির তালিকা করতে, তবে কেবল তাদের শর্টনাম এবং সংস্করণ বৈশিষ্ট্যগুলি ফিরিয়ে আনতে। আপনি অবশ্যই '|' যোগ করে অতিরিক্ত ক্ষেত্রগুলি পুনরুদ্ধার করতে পারেন এক্সপ্যাথ প্যারামিটারের শেষে এবং নোড চিহ্নিত করার জন্য প্যাটার্নটি নির্দিষ্ট করে।
wget http://<jenkins>/pluginManager/api/xml?depth=1&xpath=/*/*/shortName|/*/*/version&wrapper=plugins
এক্ষেত্রে মোড়কের আর্গুমেন্টটি প্রয়োজনীয়, কারণ এটি এক্সপ্যাথ এবং একাধিক প্লাগইন নোডের সাথে একত্রে একাধিক ক্ষেত্রের সাথে মিল রেখে ফলাফলের অংশ হিসাবে একাধিক নোড ফিরছে।
প্লাগইনগুলিতে কোন তথ্য উপলব্ধ রয়েছে তা দেখার জন্য এবং এক্সপ্যাথটি ব্যবহার করে আপনি কী সীমাবদ্ধ করতে চান তা সিদ্ধান্ত নিতে ব্রাউজারে নিম্নলিখিত URL টি ব্যবহার করা সম্ভবত দরকারী useful
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
জেনকিন্স 1.588 (2 য় নভেম্বর 2014) & 1.647 (4 ম ফেব্রুয়ারি, 2016)
জেনকিনস সিএলআই সমস্ত ইনস্টল থাকা প্লাগইনগুলির তালিকা সমর্থন করে:
java -jar jenkins-cli.jar -s http://localhost:8080/ list-plugins
list-plugins
CLI কমান্ড আছে ব্যবহারকারী প্রয়োজন হয় না সার্বিক / RunScripts অনুমতি যেমন groovy
কমান্ড আছে।
জেনকিনস সিএলআই এর মতো ব্যবহার করুন:
java -jar jenkins-cli.jar -s http://[jenkins_server] 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()}"
আপনি যদি কোডটি খেলতে চান তবে এখানে জেনকিনস জাভা এপিআই ডকুমেন্টেশন রয়েছে ।
isActive()
এপিআই রয়েছে যা আপনি এই উত্তরে গ্রুভি স্ক্রিপ্টটিতে প্লাগইনটির অবস্থা পেতে ব্যবহার করতে পারেন। দেখুন javadoc.jenkins-ci.org/hudson/PluginWrapper.html#isActive () ।
যদি আপনি কোনও ডকার পরিবেশে কাজ করছেন এবং প্লাগইনসটিেক্সট ফর্ম্যাটে প্লাগইন তালিকাটি আউটপুট করতে চান তবে ইনস্টল_স্ক্রিপ্টগুলিতে এটি পাস করার জন্য কনসোলটিতে এই স্ক্রিপ্টগুলি ব্যবহার করুন http://{jenkins}/script
:
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:${plugin.getVersion()}")
}
Jenkins.instance.pluginManager.plugins.each{
plugin ->
println ("${plugin.getShortName()}:latest")
}
:latest
আপনি println ("${plugin.getShortName()}:latest")
এখানে উত্তরগুলি কিছুটা অসম্পূর্ণ ছিল। এবং আসলে প্লাগইন তালিকাটি অর্জন করতে আমাকে অন্যান্য উত্স থেকে তথ্য সংকলন করতে হয়েছিল।
জেনকিনস সিএলআই কমান্ড লাইন থেকে আমাদের জেনকিন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেবে। আমরা এটি একটি সাধারণ কার্ল কল দিয়ে পেতে পারি।
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
নিম্নলিখিত হিসাবে সংরক্ষণ করুন plugins.groovy
।
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}
localhost:8080
গ্রোভি স্ক্রিপ্ট উল্লেখ করার সময় আপনার লগইন ব্যবহারকারীর নাম এবং পাসওয়ার্ড সহ জেনকিন্স সার্ভারকে ( এখানে) কল করুন :
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
বাছাই করা প্লাগইনগুলির সাথে বেহের উত্তর আমার জেনকিন্স মেশিনে কাজ করে না। আমি ত্রুটি গৃহীত 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>/script
কোডটি চালানোর জন্য ইউআরএল ব্যবহার করুন ।
displayName
মুদ্রণের সময় ভিত্তিক বাছাই করছেন shortName
, এটি বেশ বিভ্রান্তিকর কারণ কিছু প্লাগইন উভয়ের জন্য বর্ণানুক্রমিকভাবে এক নয়, এবং এটি এমন একটি তালিকাতে ফলাফল দেয় যা সাজানো হয় না। পরিবর্তন it.displayName
করার জন্য it.shortName
এই চমত্কারভাবে সমাধান করে মাত্র।
আপনি যদি জেনকিন্স প্রশাসক হন তবে জেনকিন্স সিস্টেম তথ্য পৃষ্ঠাটি ব্যবহার করতে পারেন:
http://<jenkinsurl>/systemInfo
/systeminfo
জেনকিন্স 1.594-এ (HTTP 404) কাজ করে না
http://localhost:8080/systemInfo
কিছু সার্ভারগুলি কেস-সংবেদনশীল। এটিও নোট করুন যে এটিতে বর্তমানে লগ ইন করা সামগ্রিক / প্রশাসকের অনুমতি থাকা প্রয়োজন।
সহ curl
এবং jq
:
curl -s <jenkins_url>/pluginManager/api/json?depth=1 \
| jq -r '.plugins[] | "\(.shortName):\(.version)"' \
| sort
এই কমান্ডটি বিশেষ জেনকিনস plugins.txt
ফাইল দ্বারা ব্যবহৃত একটি ফর্ম্যাটে আউটপুট দেয় যা আপনাকে প্রাক-ইনস্টল নির্ভরতা (যেমন ডকারের চিত্রে) সক্ষম করে:
ace-editor:1.1
ant:1.8
apache-httpcomponents-client-4-api:4.5.5-3.0
এর উদাহরণ plugins.txt
: https://github.com/hoto/jenkinsfile-example/blob/master/source/jenkins/usr/share/jenkins/plugins.txt
জেনকিন্স হোম পৃষ্ঠা থেকে:
অথবা
শংসাপত্রগুলির সাথে এখানে অন্য বিকল্পটি ভাগ করে নেওয়া
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
আমি এমন একটি সমাধান চেয়েছিলাম যা কোনও লেখকের প্রয়োজনীয়তা ছাড়াই মাস্টারে চালিত হয় এবং এটি এখানে দেখেনি। আমি একটি দ্রুত বাশ স্ক্রিপ্ট তৈরি করেছি যা প্লাগিনগুলি ডায়র থেকে সমস্ত সংস্করণ সরিয়ে ফেলবে।
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
আমি মনে করি এগুলি যথেষ্ট উত্তর (গুলি) নয় ... অনেকে হুডের নীচে কয়েকটি পদক্ষেপ জড়িত। আমি এটি কীভাবে করেছি তা এখানে।
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
পাইথন ব্যবহারকারীদের জন্য অন্য একটি বিকল্প:
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}")
}
সমস্ত প্লাগইন ইনস্টল করা আছে এবং সেগুলি HTTP: // জেনকিনস / সিস্টেমআইএনফোতে সক্ষম আছে কিনা তা একটি তালিকা রয়েছে
জেনকিনস যদি জেনকিনস ডকার ধারক হিসাবে চালিত হন তবে আপনি এই কমান্ড লাইন ব্যাশে ব্যবহার করতে পারেন:
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`
জেনকিন্স সংস্করণে 2.125 এর জন্য নিম্নলিখিতটি কাজ করেছে।
দ্রষ্টব্য: সেই ব্যবহারকারীদের সেই ব্যবহারকারী ব্যবহারকারীর জন্য বৈধ ব্যবহারকারীনাম এবং APIKey দিয়ে USERNAME এবং APIKEY বলে এমন বিভাগগুলি প্রতিস্থাপন করুন। একটি ব্যবহারকারীর জন্য API কী মাধ্যমে উপলব্ধ পরিচালনা ব্যবহারকারীরা → নির্বাচন ব্যবহারকারী → API কী বিকল্পের ।
আপনার জেনকিন্স ইনস্টলেশনটি শুরু হতে আরও বেশি সময় লাগলে আপনাকে ঘুম বাড়িয়ে দিতে হতে পারে।
দীক্ষা yum update -y
পাশাপাশি যদি আপনি ইস ব্যবহার পাশাপাশি জেনকিন্স ইনস্টল করা সংস্করণ আপগ্রেড করবে।
#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
##############
এই তথ্যটি আনার প্রচুর উপায় রয়েছে তবে আমি নীচে দুটি উপায় লিখছি: -
1. জেনকিন্স ক্লিপ পান।
জেনকিনস সিএলআই কমান্ড লাইন থেকে আমাদের জেনকিন্স সার্ভারের সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেবে। আমরা এটি একটি সাধারণ কার্ল কল দিয়ে পেতে পারি।
curl 'localhost:8080/jnlpJars/jenkins-cli.jar' > jenkins-cli.jar
২. গ্রোভি স্ক্রিপ্ট তৈরি করুন। অথবা জেনকিন্স স্ক্রিপ্ট কনসোল থেকে
জেনকিনস এপিআই থেকে প্রাপ্ত তথ্য পার্স করতে আমাদের একটি গ্রোভি স্ক্রিপ্ট তৈরি করতে হবে। এটি তার সংস্করণ সহ প্রতিটি প্লাগইন আউটপুট দেবে। নিম্নলিখিতটি প্লাগইনস.govovy হিসাবে সংরক্ষণ করুন।
def plugins = jenkins.model.Jenkins.instance.getPluginManager().getPlugins()
plugins.each {println "${it.getShortName()}: ${it.getVersion()}"}
প্লাগিনগুলির জন্য কী কী আপডেট উপলব্ধ তা আপনি আগ্রহীও হতে পারেন। তার জন্য, আপনাকে এখানে উপলভ্য আপডেট সম্পর্কিত তথ্যের সাথে ইনস্টল হওয়া প্লাগইনগুলির ডেটা মার্জ করতে হবে https://updates.jenkins.io/current/update-center.json ।
ডাউনলোড করা ফাইলটিকে JSON হিসাবে বিশ্লেষণ করতে আপনাকে দ্বিতীয় লাইনে অনলাইনে পড়তে হবে (যা বিশাল)।