• Python 操作Sonqube API 获取检测结果并打印


    1.需求:每次Sonqube检查完毕后,需要登陆才能看到结果无法通过Jenkins发布后直接看到bug 及漏洞数量。

    2.demo:发布后,可以将该项目的检测结果简单打印出来显示,后面还可以集成钉钉发送到群里。

     1 # -*- coding: UTF-8 -*-
     2 import sys
     3 reload(sys)
     4 sys.setdefaultencoding('utf8')
     5 
     6 '''
     7 @author:jmmei
     8 @file: SonarQubeDingtalk.py
     9 @time: 2019/7
    10 '''
    11 import  requests,json,jenkins,os,time,datetime
    12 
    13 
    14 
    15 
    16 #通过jenkins变量JOB_NAME传入第一个参数projectName
    17 
    18 projectName=sys.argv[1]
    19 
    20 def notification(projectName):
    21     # sonar API
    22     sonar_Url = 'http://www.baidu.com:9000/sonar/api/measures/search?projectKeys='+ projectName +'&metricKeys=alert_status%2Cbugs%2Creliability_rating%2Cvulnerabilities%2Csecurity_rating%2Ccode_smells%2Csqale_rating%2Cduplicated_lines_density%2Ccoverage%2Cncloc%2Cncloc_language_distribution'
    23     resopnse = requests.get(sonar_Url).text
    24     result = json.loads(resopnse)
    25     bug = 0
    26     leak = 0
    27     code_smell = 0
    28     coverage = 0
    29     density = 0
    30     status = ''
    31     statusStr = ''
    32 
    33     for item in result['measures']:
    34         if item['metric']=="bugs":
    35             bug = item['value']
    36         elif item['metric']=="vulnerabilities":
    37             leak = item['value']
    38         elif item['metric']=='code_smells':
    39             code_smell = item['value']
    40         elif item['metric']=='coverage':
    41             coverage = item['value']
    42         elif item['metric']=='duplicated_lines_density':
    43             density = item['value']
    44         elif item['metric']=='alert_status':
    45             status = item['value']
    46         else:
    47             pass
    48 
    49     if status == 'ERROR':
    50         messageUrl = 'http://www.iconsdb.com/icons/preview/soylent-red/x-mark-3-xxl.png'
    51         statusStr = '失败'
    52     elif status == 'OK':
    53         statusStr = '成功'
    54         messageUrl = 'http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/sign-check-icon.png'
    55 
    56     code_reslut=  "Bug数:" + bug + "个," + 
    57                   "漏洞数:" + leak + "个," + 
    58                   "可能存在问题代码:"+ code_smell + "行," + 
    59                   "覆盖率:" + coverage + "%," + 
    60                   "重复率:" + density + "%"
    61     print("静态代码扫描统计:"+"状态:"+ status +","+code_reslut)
    62     if int(bug)>=3:
    63         print("bug 数量太多,请尽快修复再发布项目!")
    64         sys.exit(1)
    65     else:
    66         print("代码质量非常好")
    67     
    68 
    69    
    70 
    71 if __name__=="__main__":
    72     #sonarQube刷新结果
    73     #time.sleep(10)
    74     notification(projectName)
    75     
    http://www.cnblogs.com/Jame-mei
  • 相关阅读:
    L1-012 计算指数
    L1-011 A-B
    L1-010 比较大小
    Django--登录
    Django--跨域设置
    Django--视图装饰器
    Django--URL配置
    Django--多数据库
    Django--channels
    Django--日志
  • 原文地址:https://www.cnblogs.com/Jame-mei/p/11936934.html
Copyright © 2020-2023  润新知