2013-01-14 7 views
8

Ich habe ein Skript, das die Artefakte aus einem jenkins-Job zieht und es auf unserem Hardware-Testsystem installiert. Jetzt muss ich heute auf eine ziemlich alte Version herunterstufen. Leider gibt die jenkins API nur die letzten Builds zurück.Wie kann ich die Jenkins API dazu bringen, mehr Builds zurückzugeben?

Ich benutze die Jenkinsapi Python API. Es schlägt fehl, wie folgt:

/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 

Der Python-API http://jenkins/job/job-name/api/python/ die die URL trifft. Wenn ich das tue, dass ich selbst, dann bekomme ich die folgende Antwort:

{"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":[]} 

Jetzt wollte ich Auftragsnummer 315. bekommen Wie kann ich das tun?

Antwort

4

landete ich mit dem folgenden Problem zu umgehen up:

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

Es ist nicht schön, aber es funktioniert.

0

Sind Sie sicher, dass alle Builds vorhanden und nicht gelöscht sind? Vielleicht sind einige Einstellungen aktiviert (zB Löschen alter Builds über Limit). Ich habe versucht, die URL meiner Jenkins-Instanz zu treffen, es rendert alle Builds (etwa 150). Ich habe sowohl Python als auch XML API Versionen ausprobiert.

+0

Ich beschränke die Anzahl der Tage, die die Builds behalten werden, aber dieser Build ist immer noch innerhalb dieser Grenze. Außerdem ist dieser spezielle Build als "für immer behalten" gekennzeichnet. – martinhans

Verwandte Themen