আমি ব্রাউজারে স্যুইচ না করে জেনকিনস বিল্ডের স্থিতি কীভাবে চেক করব?
যদি প্রয়োজন হয়, আমি JSON এপিআই ব্যবহার করে একটি স্ক্রিপ্ট তৈরি করতে পারি, তবে আমি ভাবছিলাম যে ইতিমধ্যে এটির মতো কিছু রয়েছে।
আমি ব্রাউজারে স্যুইচ না করে জেনকিনস বিল্ডের স্থিতি কীভাবে চেক করব?
যদি প্রয়োজন হয়, আমি JSON এপিআই ব্যবহার করে একটি স্ক্রিপ্ট তৈরি করতে পারি, তবে আমি ভাবছিলাম যে ইতিমধ্যে এটির মতো কিছু রয়েছে।
উত্তর:
আমি একটি বিল্ট ইন সরঞ্জাম খুঁজে পাইনি তাই আমি এটি তৈরি করেছি:
#!/usr/bin/python
#
# author: ajs
# license: bsd
# copyright: re2
import json
import sys
import urllib
import urllib2
jenkinsUrl = "https://jenkins.example.com/job/"
if len( sys.argv ) > 1 :
jobName = sys.argv[1]
jobNameURL = urllib.quote(jobName)
else :
sys.exit(1)
try:
jenkinsStream = urllib2.urlopen( jenkinsUrl + jobNameURL + "/lastBuild/api/json" )
except urllib2.HTTPError, e:
print "URL Error: " + str(e.code)
print " (job name [" + jobName + "] probably wrong)"
sys.exit(2)
try:
buildStatusJson = json.load( jenkinsStream )
except:
print "Failed to parse json"
sys.exit(3)
if buildStatusJson.has_key( "result" ):
print "[" + jobName + "] build status: " + buildStatusJson["result"]
if buildStatusJson["result"] != "SUCCESS" :
exit(4)
else:
sys.exit(5)
sys.exit(0)
কোনও বিল্ড চলছে কিনা তা পরীক্ষা করে দেখুন
আমি এই প্রশ্নের উত্তরে পাইথন স্ক্রিপ্ট চেষ্টা করেছি, কিন্তু এটি কাজ করতে পারেনি। আমি পাইথনকে জানি না, এবং ডিবাগিংয়ে কোনও সময় বিনিয়োগ করতে চাইনি, তবে এ থেকে অনুপ্রেরণা অর্জনের জন্য যথেষ্ট স্ক্রিপ্টটি পড়তে সক্ষম হয়েছি।
আমাকে যা করতে হবে তা হ'ল কোনও বিল্ডটি চলছে কিনা তা পরীক্ষা করে দেখার দরকার। এটি করার জন্য আমি কার্ল এবং গ্রেপ ব্যবহার করেছি:
curl http://myjenkins/job/myjob/lastBuild/api/json | grep --color result\":null
result\":null
0 ফিরে আসবে।result\":null
1 ফিরে আসবে।বিশেষত মার্জিত নয়, তবে এটি আমার প্রয়োজনের জন্য যথেষ্ট ভাল কাজ করে।
উদাহরণস্বরূপ, আমার কাছে বাশ স্ক্রিপ্ট রয়েছে যা একটি বিল্ড শুরু করে, তারপরে এটি শেষ হওয়ার জন্য অপেক্ষা করে:
JOB_URL=http://jenkins.local/job/stevehhhbuild
JOB_STATUS_URL=${JOB_URL}/lastBuild/api/json
GREP_RETURN_CODE=0
# Start the build
curl $JOB_URL/build?delay=0sec
# Poll every thirty seconds until the build is finished
while [ $GREP_RETURN_CODE -eq 0 ]
do
sleep 30
# Grep will return 0 while the build is running:
curl --silent $JOB_STATUS_URL | grep result\":null > /dev/null
GREP_RETURN_CODE=$?
done
echo Build finished
অনুপ্রেরণার জন্য ধন্যবাদ, ক্যাটসকুল!
TypeError: cannot concatenate 'str' and 'NoneType' objects
। আমি পাইথন জানি না, তাই আমি শেলটি ব্যবহার করতে শুরু করেছি এবং অনুপ্রেরণার জন্য আপনার উত্তরটি +1 করেছি। ধন্যবাদ!
আমার এক প্রাক্তন সহকর্মী https://github.com/txels/autojenkins লিখেছেন যা পাইথন থেকে জেনকিন্সের উদাহরণ হিসাবে কাজ করার জন্য সুবিধার বৈশিষ্ট্য এবং এপিআই টাইপের স্টাফ রয়েছে ...
আর একটি পাইথন সমাধান:
from jenkinsapi.jenkins import Jenkins
jenkins_url = 'http://<server url>/'
server = Jenkins(jenkins_url, username = 'myUser', password = myPass)
job_instance = server.get_job('the job name')
running = job_instance.is_queued_or_running()
if not running:
latestBuild = job_instance.get_last_build()
print latestBuild.get_status()
আপনি গ্রোভি স্ক্রিপ্ট ব্যবহার করতে পারেন:
জেনকিন্স-ক্লায়ার মাধ্যমে
echo 'println(jenkins.model.Jenkins.instance'\
'.getItem("<JOB-NAME>").lastBuild.building)' \
| java -jar jenkins-cli.jar -s <JENKINS-URL> groovy =
, যেখানে =
মান মানে in আপনি এর সাথে --username <USER> --password <PASS>
বা এর সাথে প্রমাণীকরণ করতে পারেন -i <SSH-PRIVATE-KEY>
।
এর মাধ্যমে SSH- র মাধ্যমে Jenkins-CLI
echo -e 'println(jenkins.getItem("JOB-NAME").lastBuild.building)\nexit' \
| ssh -p <JENKINS-SSH-PORT> <JENKINS-HOST> groovysh
আমি মনে করি আমি একটি সহজ উপায় খুঁজে পেয়েছি। যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি বিল্ডের ফলাফলটি পরীক্ষা করতে চান - যদি এটি সফলতা বা ব্যর্থতা হয়, অন্য কথায়।
জেনকিনস সি এল আই এর "বিল্ড" কমান্ড বিল্ডের ফলাফলের উপর নির্ভর করে প্রস্থান কোড পরিবর্তন করে, যতক্ষণ আপনি শেষে -s
বা -f
বিকল্পটি ব্যবহার করেন ।
উদাহরণ স্বরূপ,
java -jar jenkins-cli.jar -s <url of Jenkins instance> build <project> -s
অথবা
java -jar jenkins-cli.jar -s <url of Jenkins instance> build <project> -f
লক্ষ্য করুন যে বিকল্পটি শেষে যায়; এটি প্রথম নয় -s
, যা জেনকিন্স উদাহরণটির URL সংজ্ঞায়িত করতে ব্যবহৃত হয়।
এবং তারপরে, ফলাফলটি পেতে, আপনি ব্যবহার করতে পারেন $?
:
echo $?
ফলাফল যদি 0 হয় তবে এটি একটি সাফল্য ছিল। যদি এটি 0 ছাড়া অন্য কিছু হয় তবে এটি ব্যর্থতা ছিল।
রেফারেন্স: আমি একটি পাবলিক জেনকিন্স উদাহরণস্বরূপ যে এই পৃষ্ঠাটিতে অ্যাক্সেস দেয় খুঁজে পাচ্ছি না, কিন্তু এটি আপনার স্থানীয় জেনকিন্স ইনস্ট্যান্সের মধ্যে পাওয়া যাবে: http://<url of Jenkins Instance>/cli/command/build
। এছাড়া এর মধ্যে পার্থক্য ব্যাখ্যা করে -s
এবং -f
:
-s : Wait until the completion/abortion of the command. Interrupts are passed
through to the build.
-f : Follow the build progress. Like -s only interrupts are not passed
through to the build.
সৌভাগ্যক্রমে, একটি জিনকিনস-ক্লিপ রয়েছে যা আপনি জেনকিন্সের কাছ থেকে কিছু তথ্য পেতে ব্যবহার করতে পারেন। দুর্ভাগ্যক্রমে, আপনি সিএলআই ব্যবহার করে একটি বিল্ডের স্থিতি পুনরুদ্ধার করতে পারবেন না - যার অর্থ JSON এপিআই ব্যবহারের আপনার সমাধানটি কেবল সঠিক নয় - এটি করার একমাত্র প্রোগ্রামিক উপায়।
এছাড়াও, দেখে মনে হচ্ছে get-job
আপনি যা চান তা করতে পারে, এটি আসলে ফলাফলটি ফিরিয়ে দেয় না - এটি কেবল কাজের কনফিগারেশন ফিরিয়ে দেয়।
সিএমডি (উইন্ডোজ) এর জন্য অন্য স্ক্রিপ্ট:
:loop
ping 127.0.0.1 -n 6 1>nul
curl --silent http://localhost:8080/job/JOB_NAME/lastBuild/api/xml | FINDSTR "SUCCESS FAILURE" >nul & IF ERRORLEVEL 1 (goto :loop)
echo "BUILD FINISH!!"
আপনি এটি দিয়ে চেষ্টা করতে পারেন,
JOB_URL=http://localhost:8080/view/TestTab/job/JobWait
JOB_STATUS_URL=${JOB_URL}/lastBuild/api/json
GREP_RETURN_CODE=0
# Start the build
curl --user "username:password" $JOB_URL/build?delay=0sec
# Poll every 10 second until the build is finished
while [ $GREP_RETURN_CODE -eq 0 ]
do
sleep 10
# Grep will return 0 while the build is running:
curl --user "username:password" --silent $JOB_STATUS_URL | grep result\":null > /dev/null || if [ "$?" == "1" ]; then
exit 0
fi
GREP_RETURN_CODE=$?
done
echo Build finished