কমান্ড লাইন থেকে জেনকিন্সের বিল্ডের স্থিতিটি আমি কীভাবে চেক করব?


40

আমি ব্রাউজারে স্যুইচ না করে জেনকিনস বিল্ডের স্থিতি কীভাবে চেক করব?

যদি প্রয়োজন হয়, আমি JSON এপিআই ব্যবহার করে একটি স্ক্রিপ্ট তৈরি করতে পারি, তবে আমি ভাবছিলাম যে ইতিমধ্যে এটির মতো কিছু রয়েছে।


আপনি ক্যাটলাইট বিল্ড মনিটরের মতো বিশেষায়িত সরঞ্জামও ব্যবহার করতে পারেন যা ট্রেতে বিল্ডের অবস্থা দেখায়।
অ্যালেক্স

এখানে প্রতিটি পোস্ট মনে হয় "শেষ বিল্ড"। চাকরি / বিল্ড নম্বর এক্স এর স্থিতি পরীক্ষা করার জন্য কি একই অনুরোধ রয়েছে? আপনি রিয়েল টাইমে বা সত্যের পরে যা কিছু পরীক্ষা করছেন।
ডেভিড

উত্তর:


38

আমি একটি বিল্ট ইন সরঞ্জাম খুঁজে পাইনি তাই আমি এটি তৈরি করেছি:

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

আপনি কীভাবে আপনার স্ক্রিপ্টে জেনকিন্সের ব্যবহারকারীকে প্রমাণীকরণ করেছেন?
আমান ভার্শনে

11

কোনও বিল্ড চলছে কিনা তা পরীক্ষা করে দেখুন

আমি এই প্রশ্নের উত্তরে পাইথন স্ক্রিপ্ট চেষ্টা করেছি, কিন্তু এটি কাজ করতে পারেনি। আমি পাইথনকে জানি না, এবং ডিবাগিংয়ে কোনও সময় বিনিয়োগ করতে চাইনি, তবে এ থেকে অনুপ্রেরণা অর্জনের জন্য যথেষ্ট স্ক্রিপ্টটি পড়তে সক্ষম হয়েছি।

আমাকে যা করতে হবে তা হ'ল কোনও বিল্ডটি চলছে কিনা তা পরীক্ষা করে দেখার দরকার। এটি করার জন্য আমি কার্ল এবং গ্রেপ ব্যবহার করেছি:

curl http://myjenkins/job/myjob/lastBuild/api/json | grep --color result\":null

  • যদি কোনও বিল্ড প্রগতিতে থাকে তবে এর জন্য একটি গ্রেপ result\":null0 ফিরে আসবে।
  • যদি কোনও বিল্ড শেষ হয় তবে এর জন্য একটি গ্রেপ result\":null1 ফিরে আসবে।

বিশেষত মার্জিত নয়, তবে এটি আমার প্রয়োজনের জন্য যথেষ্ট ভাল কাজ করে।

উদাহরণস্বরূপ, আমার কাছে বাশ স্ক্রিপ্ট রয়েছে যা একটি বিল্ড শুরু করে, তারপরে এটি শেষ হওয়ার জন্য অপেক্ষা করে:

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 করেছি। ধন্যবাদ!
স্টিভ এইচএইচএইচ

আপনি যোগ করতে পারেন || এবং এর পরে প্রস্থান কোড 1 এর শর্ত, কার্ল - সাইলেন্ট $ JOB_STATUS_URL | গ্রেপ রেজাল্ট \ ": নাল> / দেব / নাল || যদি [" $? "==" 1 "]; তবে গ্রেইপিপিটারে_কোডি = $? তাই আপনি জেনকিনস বিল্ডে চলছে এমন পরিস্থিতিতে আপনি প্রস্থান কোড '1' পাবেন না? এবং আপনি এটি ব্যর্থ হতে চান না
শচর হামুজিম রাজুয়ান

6

আমার এক প্রাক্তন সহকর্মী https://github.com/txels/autojenkins লিখেছেন যা পাইথন থেকে জেনকিন্সের উদাহরণ হিসাবে কাজ করার জন্য সুবিধার বৈশিষ্ট্য এবং এপিআই টাইপের স্টাফ রয়েছে ...


4

আর একটি পাইথন সমাধান:

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

4

আপনি গ্রোভি স্ক্রিপ্ট ব্যবহার করতে পারেন:

  1. জেনকিন্স-ক্লায়ার মাধ্যমে

    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>

  2. এর মাধ্যমে SSH- র মাধ্যমে Jenkins-CLI

    echo -e 'println(jenkins.getItem("JOB-NAME").lastBuild.building)\nexit' \
    | ssh -p <JENKINS-SSH-PORT> <JENKINS-HOST> groovysh
    

3

আমি মনে করি আমি একটি সহজ উপায় খুঁজে পেয়েছি। যদি আমি সঠিকভাবে বুঝতে পারি তবে আপনি বিল্ডের ফলাফলটি পরীক্ষা করতে চান - যদি এটি সফলতা বা ব্যর্থতা হয়, অন্য কথায়।

জেনকিনস সি এল আই এর "বিল্ড" কমান্ড বিল্ডের ফলাফলের উপর নির্ভর করে প্রস্থান কোড পরিবর্তন করে, যতক্ষণ আপনি শেষে -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.

2

আপনি প্রতীকী বর্ণনাকারী ব্যবহার করতে পারেন lastBuild:

http://localhost/jenkins/job/<jobName>/lastBuild/api/xml

resultপ্রতিক্রিয়ায় উপাদান একটি স্ট্রিং বিল্ড ফলাফল বর্ণনা রয়েছে।


2

সৌভাগ্যক্রমে, একটি জিনকিনস-ক্লিপ রয়েছে যা আপনি জেনকিন্সের কাছ থেকে কিছু তথ্য পেতে ব্যবহার করতে পারেন। দুর্ভাগ্যক্রমে, আপনি সিএলআই ব্যবহার করে একটি বিল্ডের স্থিতি পুনরুদ্ধার করতে পারবেন না - যার অর্থ JSON এপিআই ব্যবহারের আপনার সমাধানটি কেবল সঠিক নয় - এটি করার একমাত্র প্রোগ্রামিক উপায়।

এছাড়াও, দেখে মনে হচ্ছে get-jobআপনি যা চান তা করতে পারে, এটি আসলে ফলাফলটি ফিরিয়ে দেয় না - এটি কেবল কাজের কনফিগারেশন ফিরিয়ে দেয়।


2

সিএমডি (উইন্ডোজ) এর জন্য অন্য স্ক্রিপ্ট:

: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!!"

ধন্যবাদ। এটি খুব সহায়ক বলে প্রমাণিত।
ভিক্টর এস

0

আপনি এটি দিয়ে চেষ্টা করতে পারেন,

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.