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