मैं ब्राउज़र पर स्विच किए बिना जेनकींस निर्माण की स्थिति की जांच कैसे करूं?
यदि आवश्यक हो, तो मैं 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 के लिए एक grep वापस आएगा।result\":null
1 के लिए एक grep वापस आ जाएगा।विशेष रूप से सुरुचिपूर्ण नहीं, लेकिन यह मेरी आवश्यकताओं के लिए पर्याप्त रूप से काम करता है।
उदाहरण के लिए, मेरे पास एक बैश स्क्रिप्ट है जो एक बिल्ड शुरू करती है, फिर इसके खत्म होने का इंतजार करती है:
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
प्रेरणा के लिए धन्यवाद, Catskul!
TypeError: cannot concatenate 'str' and 'NoneType' objects
:। मैं पायथन को नहीं जानता, इसलिए मैंने प्रेरणा के लिए शेल और + 1ed को आपके उत्तर का उपयोग करने के लिए स्विच किया। धन्यवाद!
मेरे एक पूर्व सहयोगी ने 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 =
, जहां =
मानक का मतलब है। आप के साथ --username <USER> --password <PASS>
या साथ प्रमाणित कर सकते हैं -i <SSH-PRIVATE-KEY>
।
SSH के ऊपर जेंकिंस-क्ली के माध्यम से
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