需求背景:

  现在用jenkins构建自动化测试(2个job),公司现将自动化纳入到发布系统

  要求每次构建成功之后,把测试结果发送给发布系统。这就需要先获取jenkins构建的结果,如果构建结束,才能发送测试结果,否则就要等待jenkins构建结束。

理解回调函数:

  像这样类似:男女朋友约会结束,男方要求女方到家后发1个信息,告诉他安全到家了。就是python回调函数的应用场景。男女朋友约会结束是在主函数mainfunc中,女朋友回家这个动作由callback函数完成。

  在mainfunc函数中,男朋友会接收女朋友发送已到家的消息,那怎么接收呢?就是通过调用callback这个函数来获得女朋友到家的状态,这个过程就称之为回调函数

 基本思路:

  • 先用一个demo理清自己的思路,要做哪些事?共分几个步骤?
  • 每个步骤要完成哪些事情?这些思路搞定之后,代码也就完成了。
  • 这里的有一个技巧:先用randomint随机生成一个数字,用来代表jenkins的构建结果状态,而不是每次都真的去请求接口。因为这会增加验证结果的时间成本,分散精力。
  • 最后整个流程顺下来,再把随机数部分替换为真正去请求jenkins接口,这会大大节约调试时间。

  version1:

  demo 理清思路,用简单的代码描述清楚自己想要实现的效果

 def mainfunc(func):
''' :param func: callback func Name
:return:
'''
print('start build job')
func()
print('send report to ding wen qi') def callback():
''' :return: jenkins job build state
'''
print('jenkins is done') mainfunc(callback)

  version2:

  callback函数,获取job的构建状态。该函数返回一个状态,true或false。true表示job已经构建结束,false表示程序仍然在构建中

 def callback():
''' :return: jenkins job build state
'''
num = random.randint(1,10)
#利用randint随机生成一个num 假装enkins是返回的构建结果。偶数认为已经构建结束,奇数认为仍在构建中
print(num)
if num % 2 != 0:#奇数
print('kins is building job')
return {'buildState':False}
else:#偶数
print('jenkins is done')
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

  结果:

 step1:start build job
step2:jenkins is building job
step2:jenkins is building job
step2:jenkins is done
step3:send report to ding wen qi

  version4:

  加入等待时间,在询问jenkins是否构建结束之前,先等上10秒1钟(正常1个job至少构建1分钟以上,不停询问很浪费资源)

 time.sleep(2)

  完整的demo代码:

 import random
import time def mainfunc(func):
'''
:param func: callback func Name
:return:
'''
print('step1:start build job') #根据callback返回的状态,决定是否进行下一步操作
while True:
flag = func()
if flag :
print('step3:send report')
break def callback():
'''
:return: jenkins job build state
'''
#jenkins构建job需要至少3分钟,所以每隔1分钟请求一次
time.sleep(2)
num = random.randint(1,100)
#利用randint随机生成一个num 假装enkins是返回的构建结果。偶数认为已经构建结束,奇数认为仍在构建中
# print(num)
if num % 2 != 0:#奇数
print('step2:jenkins is building job')
return False
else:#偶数
print('step2:jenkins is done')
return True mainfunc(callback)

最新文章

  1. 【荐】使用eval()、new Function()将JSON字符串转换为JSON对象
  2. VBS使用Scripting.Dictionary字典对象
  3. Binary Tree Level Order Traversal
  4. plist文件的读取
  5. 14.3.2.4 Locking Reads 锁定读
  6. cortexm内核 栈的8字节对齐及关键字PRESERVE8
  7. HDU 2609 How many
  8. T470p VS 2017 上运行 VS 2015 + Qt 5.6.2 + GLSL 400
  9. 为什么要用PolyFill(JS中的修补匠)
  10. MongoDB数据库去重
  11. 【LeetCode每天一题】Merge Intervals(合并区间)
  12. hadoop大数据基础框架技术详解
  13. Entity Framework 与 LINQ to SQL
  14. TabLayout自定义tab,实现多样导航栏
  15. C++中的关键字用法--- explicit
  16. mybatis由浅入深day02_9逆向工程
  17. POJ 1860 Currency Exchange(Bellman-Ford)
  18. SCUT个人整理的常见问题
  19. tab下拉菜单
  20. CSS3制作分步注册表单

热门文章

  1. PythonDay07
  2. 编写的Java第一个程序
  3. P2586 [ZJOI2008]杀蚂蚁
  4. spring security OAuth2.0之客户端Client的实现
  5. C++泛型程序设计---算法和提升
  6. python基础知识之数据类型
  7. TCP软件环境测试
  8. 安装SQL2005数据库服务时报错处理方法
  9. flask项目中设置logo
  10. Flask【第1篇】:Flask介绍