需求:
我現在需要完成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='構建中,請稍后獲取測試結果'
官方文檔: