python回調函數應用-獲取jenkins構建結果


需求背景:

  現在用jenkins構建自動化測試(2個job),公司現將自動化納入到發布系統

  要求每次構建成功之后,把測試結果發送給發布系統。這就需要先獲取jenkins構建的結果,如果構建結束,才能發送測試結果,否則就要等待jenkins構建結束。

理解回調函數:

  像這樣類似:男女朋友約會結束,男方要求女方到家后發1個信息,告訴他安全到家了。就是python回調函數的應用場景。男女朋友約會結束是在主函數mainfunc中,女朋友回家這個動作由callback函數完成。

  在mainfunc函數中,男朋友會接收女朋友發送已到家的消息,那怎么接收呢?就是通過調用callback這個函數來獲得女朋友到家的狀態,這個過程就稱之為回調函數

 基本思路:

  • 先用一個demo理清自己的思路,要做哪些事?共分幾個步驟?
  • 每個步驟要完成哪些事情?這些思路搞定之后,代碼也就完成了。
  • 這里的有一個技巧:先用randomint隨機生成一個數字,用來代表jenkins的構建結果狀態,而不是每次都真的去請求接口。因為這會增加驗證結果的時間成本,分散精力。
  • 最后整個流程順下來,再把隨機數部分替換為真正去請求jenkins接口,這會大大節約調試時間。

  version1:

  demo 理清思路,用簡單的代碼描述清楚自己想要實現的效果

 1 def mainfunc(func):  2     '''
 3     
 4  :param func: callback func Name  5  :return:  6     '''
 7     print('start build job')  8  func()  9     print('send report to ding wen qi') 10 
11 
12 def callback(): 13     '''
14     
15  :return: jenkins job build state 16     '''
17     print('jenkins is done') 18 
19 mainfunc(callback)

   version2:

  callback函數,獲取job的構建狀態。該函數返回一個狀態,true或false。true表示job已經構建結束,false表示程序仍然在構建中

 1 def callback():  2     '''
 3 
 4  :return: jenkins job build state  5     '''
 6     num = random.randint(1,10)  7     #利用randint隨機生成一個num 假裝enkins是返回的構建結果。偶數認為已經構建結束,奇數認為仍在構建中
 8     print(num)  9     if num % 2 != 0:#奇數
10         print('kins is building job') 11         return  {'buildState':False} 12     else:#偶數
13         print('jenkins is done') 14         return {'buildState': True}

 

  version3:

  mainfunc接收callback返回的狀態,true:做send report操作,false 再次調用func函數確認,直到結果是true

    while True: flag = func() if flag : print('step3:send report to ding wen qi') break

  結果:

1 step1:start build job 2 step2:jenkins is building job 3 step2:jenkins is building job 4 step2:jenkins is done 5 step3:send report to ding wen qi

  version4:

  加入等待時間,在詢問jenkins是否構建結束之前,先等上10秒1鍾(正常1個job至少構建1分鍾以上,不停詢問很浪費資源)

1 time.sleep(2)

  完整的demo代碼:

 1 import random  2 import time  3 
 4 def mainfunc(func):  5     '''
 6  :param func: callback func Name  7  :return:  8     '''
 9     print('step1:start build job') 10 
11     #根據callback返回的狀態,決定是否進行下一步操作
12     while True: 13         flag = func() 14         if flag : 15             print('step3:send report') 16             break
17 
18 def callback(): 19     '''
20  :return: jenkins job build state 21     '''
22     #jenkins構建job需要至少3分鍾,所以每隔1分鍾請求一次
23     time.sleep(2) 24     num = random.randint(1,100) 25     #利用randint隨機生成一個num 假裝enkins是返回的構建結果。偶數認為已經構建結束,奇數認為仍在構建中
26     # print(num)
27     if num % 2 != 0:#奇數
28         print('step2:jenkins is building job') 29         return False 30     else:#偶數
31         print('step2:jenkins is done') 32         return True 33 
34 mainfunc(callback)

 


免責聲明!

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



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