2013-01-14 12 views
8

Mam skrypt, który ściąga artefakty z pracy Jenkins i instaluje go w naszym systemie testowym sprzętu. Teraz muszę zmienić wersję na starą. Niestety, interfejs API Jennkins zwraca tylko kilka ostatnich kompilacji.Jak sprawić, by interfejs API Jennkins zwrócił więcej kompilacji?

Używam API pytona Jenkinsapiego. Następuje błąd:

/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 

Interfejs API Pythona trafia na URL http://jenkins/job/job-name/api/python/. Jeśli mogę to zrobić sam, to mam następującą odpowiedź:

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

Teraz chciałem dostać numer zadania 315. W jaki sposób mogę to zrobić?

Odpowiedz

4

skończyło się stosując następujące obejście:

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

To nie jest ładna, ale to działa.

0

Czy jesteś pewien, że wszystkie kompilacje są obecne i nie zostały usunięte? Być może niektóre ustawienia są włączone (np. Usuwać stare kompilacje za pomocą limitu). Próbowałem trafić adres URL mojej instancji Jenkinsa, renderował on wszystkie kompilacje (około 150). Próbowałem zarówno wersji Pythona i XML api.

+0

Ograniczam liczbę dni przechowywania kompilacji, ale ta kompilacja nadal mieści się w tym limicie. Ponadto ta konkretna kompilacja jest oznaczona jako "keep forever". – martinhans

Powiązane problemy