1. 程式人生 > >Jenkins獲取編譯狀態

Jenkins獲取編譯狀態

方案 lur cas exc als ati star .get 邏輯

背景:在通過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

Jenkins獲取編譯狀態