在jenkins发布代码前有必要进行代码自动化测试,而最终代码是否需要发布就需要依据自动化测试的结果来处理,jenkins中使用fabric模块调用远程服务器执行shell脚本,比如在方法中调用远程服务器执行docker容器中的代码自动测试,我们期望对run执行的shell脚本进行判断,目标实现逻辑如下:本文地址:http://www.04007.cn/article/969.html,未经许可,不得转载.
#取得shell执行结果 result = run("docker exec -it contain pytest /app/ --cov") #根据结果进行处理 if result == "Ok": print("测试成功通过,继续发布") else: print("测试失败,终止发布")本文地址:http://www.04007.cn/article/969.html,未经许可,不得转载.
但实际在执行过程中会发现,如果pytest测试出现有不通过的测试用例,run语句就会直接抛出告警,并终止发布任务。报错内容:Warning: run() received nonzero return code 1 while executing,即默认根本获取不到run的运行结果,这时怎么处理呢?
这时需要用到fabric的一个env配置来让run命令忽略这个fabric的告警,env是fabric模块中保存用户配置的字典(保存了相关的配置,比如服务器用户名env.user,密码env.password,端口env.port等)在发布脚本python文件中的env里添加如下配置即可实现忽略Warning继续执行。
env.warn_only=True本文地址:http://www.04007.cn/article/969.html,未经许可,不得转载.
但这还没有解决问题,添加上面的代码只能实现发布脚本忽略告警继续运行,但对pytest测试发现的错误并不能识别,result也并没有返回具体的字符串,我曾尝试使用run("echo $?")来得取pytest最后的执行结果,但发现不管测试通过与否得到的都是0(但直接在服务器执行时,pytest错误的话$?会是1的)。所以接下来我们就要正确认识run运行结果返回的内容了。run运行结果是一个对象,可以通过return_code来判断执行结果:本文地址:http://www.04007.cn/article/969.html,未经许可,不得转载.
result = run("docker exec -it contain pytest /app/ --cov") print(result) # 命令执行的结果,直接打印好像什么都没有输出 print(result.return_code) # 返回码,0表示正确执行,1表示错误 print(result.failed) # 如果执行失败 result.failed 为True print(result.succeeded) # 执行成功result.succeeded 为True本文地址:http://www.04007.cn/article/969.html,未经许可,不得转载.
有了上面这些方法然后我们就方便根据pytest自动测试的结果来进行自定义后续操作了。本文地址:http://www.04007.cn/article/969.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/969.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |