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


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

  • 相关阅读:
    多线程
    泛型
    枚举、注解
    重写comparater比较器
    Arrays工具类和Collections工具类
    重写equals和hashCode的方法
    遍历集合的方法
    关键字总结
    having 的用法
    HTTP协议
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/15438599.html
Copyright © 2011-2022 走看看