背景:在通過python的API調用Jenkins,啟動Jenkins的job任務時,是需要知道Jenkins的編譯狀態,獲取編譯狀態為
status=server.get_build_info(jobname, get_number2)['result'] #jobname,為任務的job名稱,get_number2為編譯版本號
目前是以前項目中截取的代碼,我連接Jenkins是用了兩種方式,因為有一種方式不能進行編譯job,另外一種獲取其他數據有問題,也是一直存在的bug
def connet_jenkinsjob(self): #連接Jenkins
server = Jenkins(jenkins_url, username=jenkins_user, password=jenkins_password,
requester=CrumbRequester(username=jenkins_user, password=jenkins_password,
baseurl=jenkins_url))
return server
def stats_jenkinsjob(self):#連接Jenkins
server = jenkins.Jenkins(jenkins_url, username=jenkins_user, password=jenkins_password)
return server
def bulids_job(self):
global get_number2
server = self.stats_jenkinsjob()
server_build = self.connet_jenkinsjob()
server_build.build_job(jobname, params=param_dict) # 待觀察這個問題有解決方案不 進行項目的編譯
sql = "update auto_caseList SET runStart='運行中' WHERE id= '" + key + "'""
try:
get_number2 = server.get_job_info(jobname)['nextBuildNumber'] #獲取下一個編譯版本號
get_number = server.get_job_info(jobname)['lastBuild']['number'] #獲取編譯的版本號
except Exception, e:
print "首次創建所以獲取不到編譯的版本號", e
self.mysql_uptate_operation(sql)
else:
get_buildstats = server.get_build_info(jobname, get_number)['building']#獲取編譯的狀態,是否在編譯
if get_buildstats == False:
print "編譯中,數據狀態進行更新"
else:
print "沒有編譯"
finally:
sleep(23) #一定要加,在啟動編譯后,不能馬上獲取編譯狀態,不然一直是編譯成功,如果Jenkins編譯失敗是會在20-23S之間
status=server.get_build_info(jobname, get_number2)['result']#獲取編譯的狀態,編譯是否成功,如果不成功,就會返回FAILURE,編譯成功是返回NONE
if status == "FAILURE":
print "構建出錯: %s | 構建項目編號:%s" % (jobname, get_number2)
sql = "update auto_caseList SET runStart='構建出錯' WHERE id= '" + key + "'""
self.mysql_uptate_operation(sql)
else:
print "構建成功:%s | 構建項目編號:%s" % (jobname, get_number2)
我這里的邏輯是獲取到編譯狀態后,在等23s后查看編譯是否成功,如果編譯成功,編譯完成會是None,而不通過的就是FAILURE
