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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:


添加关注,让我们一起共同成长!

posted on 2021-10-22 14:10  Wu_Candy  阅读(103)  评论(0编辑  收藏  举报