Come controllare lo stato di build di un Jenkins dalla row di command?

Come controllare lo stato di build di Jenkins senza passare al browser?

Se necessario posso creare uno script utilizzando l'API JSON, ma mi chiedevo se c'è già qualcosa di simile.

  • Vim - Azionare l'azione \ script su save \ write?
  • Come si può aggiungere un test a row di command a Jenkins che legge il codice di output?
  • Batch rinomina directory con regex tramite row di command su Linux
  • Lunghezza del command Cisco ASA
  • Posso "registrare" script python per eseguire su Windows?
  • Come montare un file ISO in Linux?
  • Lo slave di Jenkins non riesce a stringere la mano sulle windows
  • Jenkins 2.x distriggers l'installazione iniziale dell'amministratore
  • Come si può aggiungere un test a row di command a Jenkins che legge il codice di output?
  • 9 Solutions collect form web for “Come controllare lo stato di build di un Jenkins dalla row di command?”

    Non ho potuto trovare uno strumento costruito in modo da ho fatto uno:

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

    Controlla per vedere se una build è in esecuzione o less

    Ho provato lo script Python nella risposta a questa domanda, ma non ho potuto farlo funzionare. Non conosco Python e non ho voluto investire in tempo per eseguire il debug, ma sono riuscito a leggere abbastanza lo script per get l'ispirazione da esso.

    Tutto quello che dovrei fare è controllare per vedere se una build è in esecuzione o no. Per fare questo ho usato arricciature e grep, come questo:

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

    • Se una build è in corso, un grep per il result\":null restituirà 0.
    • Se una costruzione è terminata, un grep per il result\":null restituirà 1.

    Non particolarmente elegante, ma funziona abbastanza bene per le mie esigenze.

    Ad esempio, ho uno script Bash che inizia una build e poi aspetta che finisca:

     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 

    Grazie per l'ispirazione, Catskul!

    Un ex mio collega ha scritto questo: https://github.com/txels/autojenkins che ha un integer gruppo di funzionalità di convenienza e di tipo API in giro per lavorare con un'istanza jenkins da Python.

    Fortunatamente, c'è un jenkins-cli che puoi usare per get alcune informazioni da jenkins. Purtroppo, non è ansible recuperare lo stato di una build utilizzando il CLI – il che significa che la soluzione per l'utilizzo dell'API JSON non è solo corretto – è l'unico modo programmato di farlo.

    Inoltre, mentre sembra che il get-job possa fare quello che si desidera, non effettua effettivamente il risultato: restituisce solo la configuration del process.

    So che è passato molto tempo da quando questa domanda è stata fatta, ma credo di aver trovato un modo più semplice.

    Se ho capito bene, vuoi controllare il risultato della build – se fosse un successo o un fallimento, in altre parole.

    Il command "build" di Jenkins CLI modifica il codice di output in base al risultato della build, a patto che utilizzi l'opzione -s o -f alla fine.

    Per esempio,

     java -jar jenkins-cli.jar -s <url of Jenkins instance> build <project> -s 

    o

     java -jar jenkins-cli.jar -s <url of Jenkins instance> build <project> -f 

    Notare che l'opzione va alla fine; non è il primo -s, utilizzato per definire l'url dell'istanza jenkins.

    E poi, per get il risultato, puoi usare $?

     echo $? 

    Se il risultato è 0, è stato un successo. Se è qualcosa di diverso da 0, è stato un fallimento.

    Riferimento: Non riesco a trovare un'istanza pubblica Jenkins che consente di accedere a questa pagina, ma può essere trovata nell'istanza locale Jenkins: http://<url of Jenkins Instance>/cli/command/build . Spiega anche la differenza tra -s e -f.

    Un'altra soluzione pitone:

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

    È ansible utilizzare il descrittore simbolico lastBuild :

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

    L'elemento della risposta nella risposta contiene una string che descrive l'esito della build.

    È ansible utilizzare script groovy

    1. via jenkins-cli

       echo -e 'println(jenkins.model.Jenkins.instance.getItem("<JOB-NAME>").lastBuild.building)' \ | java -jar jenkins-cli.jar -s <JENKINS-URL> groovy = 

      , where = significa stdin. È ansible autenticare con --username <USER> --password <PASS> o con -i <SSH-PRIVATE-KEY> .

    2. via jenkins-cli su ssh

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

    Altri script per cmd Windows.

     :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!!" 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.