2013-01-14 16 views
8

Ho uno script che estrae gli artefatti da un lavoro di jenkins e lo installa sul nostro sistema di test hardware. Ora, oggi ho bisogno di passare a una versione piuttosto vecchia. Sfortunatamente, l'API di jenkins restituisce solo le ultime build.Come faccio a rendere le API di jenkins restituite più build?

Uso l'API jenkinsapi python. Non riesce come segue:

/usr/local/lib/python2.7/dist-packages/jenkinsapi-0.1.6-py2.7.egg/jenkinsapi/job.pyc in get_build(self, buildnumber) 
    177  def get_build(self, buildnumber): 
    178   assert type(buildnumber) == int 
--> 179   url = self.get_build_dict()[ buildnumber ] 
    180   return Build(url, buildnumber, job=self) 
    181 

L'API pitone colpisce l'URL http://jenkins/job/job-name/api/python/. Se lo faccio io, allora ottengo la seguente risposta:

{"actions":[{},{},{},{},{},{},{}], 
"description":"text", 
"displayName":"job-name", 
"displayNameOrNull":None, 
"name":"job-name", 
"url":"http://jenkins/job/job-name/", 
"buildable":True, 
"builds":[ 
    {"number":437,"url":"http://jenkins/job/job-name/437/"}, 
    {"number":436,"url":"http://jenkins/job/job-name/436/"}, 
    {"number":435,"url":"http://jenkins/job/job-name/435/"}, 
    {"number":434,"url":"http://jenkins/job/job-name/434/"}, 
    {"number":433,"url":"http://jenkins/job/job-name/433/"}, 
    {"number":432,"url":"http://jenkins/job/job-name/432/"}, 
    {"number":431,"url":"http://jenkins/job/job-name/431/"}, 
    {"number":430,"url":"http://jenkins/job/job-name/430/"}, 
    {"number":429,"url":"http://jenkins/job/job-name/429/"}, 
    {"number":428,"url":"http://jenkins/job/job-name/428/"}, 
    {"number":427,"url":"http://jenkins/job/job-name/427/"}, 
    {"number":426,"url":"http://jenkins/job/job-name/426/"}, 
    {"number":425,"url":"http://jenkins/job/job-name/425/"}, 
    {"number":424,"url":"http://jenkins/job/job-name/424/"}, 
    {"number":423,"url":"http://jenkins/job/job-name/423/"}], 
"color":"yellow_anime", 
"firstBuild": {"number":311,"url":"http://jenkins/job/job-name/311/"}, 
"healthReport":[ 
       {"description":"Test Result: 0 tests failing out of a total of 3 tests.","iconUrl":"health-80plus.png","score":100}, 
       {"description":"Build stability: No recent builds failed.","iconUrl":"health-80plus.png","score":100}], 
"inQueue":False, 
"keepDependencies":False, 
"lastBuild":{"number":438,"url":"http://jenkins/job/job-name/438/"}, 
"lastCompletedBuild":{"number":437,"url":"http://jenkins/job/job-name/437/"}, 
"lastFailedBuild":{"number":386,"url":"http://jenkins/job/job-name/386/"}, 
"lastStableBuild":{"number":424,"url":"http://jenkins/job/job-name/424/"}, 
"lastSuccessfulBuild":{"number":437,"url":"http://jenkins/job/job-name/437/"}, 
"lastUnstableBuild":{"number":437,"url":"http://jenkins/job/job-name/437/"}, 
"lastUnsuccessfulBuild":{"number":437,"url":"http://jenkins/job/job-name/437/"}, 
"nextBuildNumber":439, 
"property":[], 
"queueItem":None, 
"concurrentBuild":False, 
"downstreamProjects":[], 
"scm":{}, 
"upstreamProjects":[]} 

Ora, volevo ottenere il numero di posti di lavoro 315. Come posso fare questo?

risposta

4

ho finito per usare la seguente soluzione:

try: 
    build=job.get_build(build_no) 
except KeyError: 
    build=jenkinsapi.build.Build('%s%d/' % (job.baseurl, build_no), build_no, job=job) 

Non è bello, ma funziona.

0

Sei sicuro che tutte le build sono presenti e non cancellate? Forse ci sono alcune impostazioni abilitate (come cancellare vecchie build via limite) .. Ho provato a colpire l'URL sulla mia istanza Jenkins, rende tutte le build (circa 150). Ho provato entrambe le versioni API Python e XML.

+0

Limito il numero di giorni in cui le build sono conservate, ma questa build è ancora all'interno di quel limite. Inoltre, questa particolare build è contrassegnata come "conserva per sempre". – martinhans

Problemi correlati