Python 之 Jenkins 分析指定环境发布信息
分享背景
工作中由于部署的工程服务比较多,测试环境也比较多,如果想知道哪个测试环境发布了哪些内容,需要从发布列表中一一肉眼查看,十分费眼。
有没有更便捷的方式来获取这些测试环境的发布内容呢?答案:有的。我们可以通过 Python 结合 Jenkins 包模块来自动分析查看指定环境的发布内容。
代码实现
1.获取 Jenkins 操作对象
1 # -*- coding: utf-8 -*- 2 import jenkins 3 4 joblists=[] 5 """ 6 获取jenkins操作对象 7 """ 8 def jenkins_get_server(): 9 print("start to get") 10 jenkins_server_url = "https://jenkins.test.io" #jenkins服务地址 11 user_id = "tony" #jenkins 登录账号 12 api_token = "test" #jenkins 登录密码 13 # 实例化jenkins对象,连接远程的jenkins master server 14 server = jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token) 15 return server
2.获取 Job 信息
1 """ 2 获取job的信息 3 """ 4 def jenkins_get_jobs(): 5 # String参数化构建job名为job_name的job, 参数param_dict为字典形式,如:param_dict= {"param1":“value1”, “param2”:“value2”} 6 # server.build_job(job_name, parameters=param_dict) 7 server = jenkins_get_server() 8 for j in server.get_all_jobs(): 9 if("op-beta" in j['fullname']): 10 # print(j) 11 joblists.append(j['name'])
3.获取 Job 构建信息
1 ''' 2 获取job构建的信息 3 ''' 4 def jenkins_get_build_number(name): 5 server = jenkins_get_server() 6 resp=server.get_jobs(name) 7 print(resp)
4.获取 Job 最后一次构建信息
1 """ 2 获取job的最后一次构建信息 3 """ 4 def jenkins_get_job_info(job_name,env): 5 server = jenkins_get_server() 6 lastbuildNumber = server.get_job_info(job_name)['lastBuild']['number'] 7 print(lastbuildNumber) 8 build_state = get_job_deploy_list_info(server, job_name, lastbuildNumber,env) 9 print(build_state)
5.从 Job 部署记录中获取 env(测试环境) 发布记录
1 """ 2 获取job的部署记录中查找env发布的记录 3 """ 4 def get_job_deploy_list_info(server,name,build_numbers,env): 5 build_state=name+"-->"+str(build_numbers)+"-->构建完成" 6 # 获取正在排队构建的job队列 即pending状态中的所有job,如果没有 pending状态的job即返回1个空列表 7 queue_info = server.get_queue_info() 8 if queue_info: 9 for queue_job_info in queue_info: 10 if queue_job_info['task']['name'] == name: 11 # msg = 'pending期,排队构建中' 12 build_state = name+"-->"+str(build_numbers)+'-->pending' 13 else: 14 build_state = server.get_build_info(name, build_numbers)['result'] # 构建结束 SUCCESS|FAILURE<class 'str'> ABORTED <class 'str'> 构建中None None <class 'NoneType'> 15 # build_env_info=server.get_build_env_vars(name,build_number) 16 17 build_type = "" 18 build_author = "" 19 build_env_stuat=[] 20 21 for i in range(40): 22 try: 23 build_info=server.get_build_info(name,build_numbers-i) 24 # print(build_info) 25 except: 26 pass 27 28 # 取出编译号 29 build_number = build_info['number'] 30 # 取出编译时间 31 build_time = get_time(build_info['timestamp']) 32 # 取出编译url 33 build_url = build_info['url'] 34 # 取出编译选择的环境 35 for dict1 in build_info['actions']: 36 # print(dict1) #list1 实际上是一个dict1 37 if("ars-fe-op-beta-cn0"==name): 38 if ("parameters" in dict1): 39 for i in dict1['parameters']: 40 if(i['name']=="api_server"): 41 build_type=i['value'] 42 43 if("parameters" in dict1): 44 for i in dict1['parameters']: 45 if(i['name']=="build_profile"): 46 build_type=i['value'] 47 48 #取出服务部署者 49 if("causes" in dict1 and 'userName' in dict1['causes'][0]): 50 build_author=dict1['causes'][0]['userName'] 51 52 53 54 if(build_type==env): 55 print(str(build_number)+"->"+build_time+"->"+build_type+"->"+build_author+"->"+build_url) 56 57 return build_state
6.时间戳转换为str类型的时间格式
1 """ 2 #时间戳转换为str类型的时间格式 3 """ 4 def get_time(timestamp): 5 import datetime 6 dateArray = datetime.datetime.fromtimestamp(timestamp/1000) 7 otherStyleTime = dateArray.strftime("%Y-%m-%d %H:%M:%S") 8 return otherStyleTime
7.获取所有 Job 在 env 环境上面的部署记录
1 """ 2 #获取所有的job在env环境上面部署的记录(近40次) 3 """ 4 def get_all_job_of_evn(env): 5 jenkins_get_jobs() 6 #需要忽略掉的job名称 7 ignore_list = ['repeater-test-op-beta-cn0', 8 'jacoco-test-op-beta-cn0', 9 ] 10 11 joblistss = list(set(joblists).difference(set(ignore_list))) 12 joblistes = [] 13 for apis in joblistss: 14 if ("api" not in apis): 15 print(apis) 16 joblistes.append(apis) 17 print(joblistes, len(joblistes)) 18 19 for jobname in joblistes: 20 jenkins_get_job_info(jobname,env) 21 22 if __name__=="__main__": 23 get_all_job_of_evn("stuat")
执行结果
备注: 今天分享的内容是基于 Jenkins 服务端的 Version=2.164
欢迎关注【无量测试之道】公众号,回复【领取资源】
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!