[Python]python-jenkins獲取正在構建中的job


需求:

我現在需要完成1個接口,這個接口會啟動jenkins構建jobA,

jobA構建結束, 返回job的構建結果 

思路:

首先使用get_job_info獲取最后1次構建的構建序號,然后再通過get_build_info根據最后1次構建序號,來獲取最后1次的構建結果

lastbuildNumber=server.get_job_info(name)['lastBuild']['number'] build_state = server.get_build_info(name,lastbuildNumber)['result']

遇到問題:

但困難是,通過api啟動jenkins構建job,這個job總會有一段pending期,可能會是在4~6秒之間

如果我在這4~6秒之間使用get_build_info去獲取Job的構建結果,它獲取的將不是我想要的"最后1次"構建結果,而獲取到的會是"上1次"構建結束之后的構建結果 

舉例說明:

當前構建序列號是505

我啟動job后,構建序號是506,但這次構建正處於pending期

所以獲取到的lastbuildNumber值並不是506,而是505

這樣,當我通過get_build_info(name,lastbuildNumber)獲取到的構建信息就是第505次構建的信息,而我期望獲得是第506次構建信息 

解決辦法:

get_queue_info()這個方法可以獲取正在排隊構建的job隊列 即pending狀態中的所有job,如果沒有 pending狀態的job即返回1個空列表

我們可以這樣判斷:

通過get_queue_info獲取當前正在構建的job列表

輪詢get_queue_info,直到jobA不出現在這個隊列中,說明已經成功啟動了JobA 

代碼示例:

 
         
queue_info=server.get_q
print(queue_info)
if queue_info:                                                                                                        
    for queue_job_info in queue_info:                                                                                 
        if queue_job_info['task']['name'] == 'export_apk':                                                            
            msg='pending期,排隊構建中'                                                                                      
            print()                                                                                                   
else:                                                                                                                 
    #獲取job的最后次構建號                                                                                                     
    lastbuildNumber=server.get_job_info(name)['lastBuild']['number']                                                  
    build_state = server.get_build_info(name,lastbuildNumber)['result']                                               
    print(build_state,type(build_state)) #構建結束 SUCCESS|FAILURE<class 'str'>    構建中None  None <class 'NoneType'>       
    if build_state == 'SUCCESS':                                                                                      
        msg='構建成功'                                                                                                    
        result='1111'                                                                                                
        # return '測試結果'                                                                                               
    elif build_state == 'FAILURE':                                                                                    
        msg = '構建失敗'                                                                                                  
        result ='22222'                                                                                               
    elif build_state is None:                                                                                         
        msg='構建中,請稍后獲取測試結果'                                                                                           
                                                                                                                      

 

 

 

方文檔:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM