Reputation: 1203
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
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
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