martinhans
martinhans

Reputation: 1203

How do I make the jenkins API return more builds?

I have a script that pulls the artifacts from a jenkins job and installs it on our hardware test system. Now, today I need to downgrade to a pretty old version. Unfortunately, the jenkins API only returns the last few builds.

I use the jenkinsapi python API. It fails as follows:

/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 

The python API hits the the url http://jenkins/job/job-name/api/python/. If I do that myself, then I get the following response:

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

Now, I wanted to get job number 315. How do I do this?

Upvotes: 8

Views: 2353

Answers (2)

martinhans
martinhans

Reputation: 1203

I ended up using the following workaround:

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

It's not pretty, but it works.

Upvotes: 4

Vadim Kotov
Vadim Kotov

Reputation: 8284

Are you sure that all builds are present and not deleted? Maybe there are some settings enabled (like delete old builds via limit).. I've tried to hit the URL on my Jenkins instance, it renders all builds (around 150). I've tried both python and XML api versions.

Upvotes: 0

Related Questions