Python调用SonarQube API获取代码质量报告并集成钉钉通知
本文介绍如何使用Python脚本通过SonarQube API获取项目代码质量检测结果,包括Bug、漏洞、覆盖率等关键指标。通过解析JSON响应数据,将统计结果打印输出,并可进一步集成钉钉机器人实现自动化通知,帮助开发者在Jenkins发布后直接掌握代码质量状况。
本文详细解析如何利用Python调用SonarQube API来获取代码检测结果,并通过示例代码展示完整的处理流程。该方案对日常开发或工作中集成代码质量检查具有实际参考价值,适合希望自动化获取SonarQube报告的技术人员参考。
SonarQube API调用需求分析
在实际工作中,SonarQube扫描完成后通常需要手动登录系统才能查看结果,这导致Jenkins构建发布后无法直接看到Bug和漏洞的数量。因此,我们需要一种自动化方式来获取这些关键指标,以便在构建流程中即时反馈代码质量状况。
Python实现代码质量报告解析
本文提供的Demo展示了如何在项目发布后自动打印该项目的检测结果摘要。通过解析SonarQube API返回的数据,我们可以提取Bug数量、漏洞等级、代码异味、覆盖率等关键指标。此外,该方案还预留了集成钉钉机器人的接口,便于将检测结果自动发送到工作群中,实现即时通知。
核心代码实现
# -*- coding: UTF-8 -*-
import sys
reload(sys)
sys.setdefaultencoding('utf8')
'''
@author:jmmei
@file: SonarQubeDingtalk.py
@time: 2019/7
'''
import requests,json,jenkins,os,time,datetime
#通过jenkins变量JOB_NAME传入第一个参数projectName
projectName=sys.argv[1]
def notification(projectName):
# sonar API
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'
resopnse = requests.get(sonar_Url).text
result = json.loads(resopnse)
bug = 0
leak = 0
code_smell = 0
coverage = 0
density = 0
status = ''
statusStr = ''
for item in result['measures']:
if item['metric']=="bugs":
bug = item['value']
elif item['metric']=="vulnerabilities":
leak = item['value']
elif item['metric']=='code_smells':
code_smell = item['value']
elif item['metric']=='coverage':
coverage = item['value']
elif item['metric']=='duplicated_lines_density':
density = item['value']
elif item['metric']=='alert_status':
status = item['value']
else:
pass
if status == 'ERROR':
messageUrl = 'http://www.iconsdb.com/icons/preview/soylent-red/x-mark-3-xxl.png'
statusStr = '失败'
elif status == 'OK':
statusStr = '成功'
messageUrl = 'http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/sign-check-icon.png'
code_reslut= "Bug数:" + bug + "个," + \
"漏洞数:" + leak + "个," + \
"可能存在问题代码:"+ code_smell + "行," + \
"覆盖率:" + coverage + "%," + \
"重复率:" + density + "%"
print("静态代码扫描统计:"+"状态:"+ status +","+code_reslut)
if int(bug)>=3:
print("bug 数量太多,请尽快修复再发布项目!")
sys.exit(1)
else:
print("代码质量非常好")
if __name__=="__main__":
#sonarQube刷新结果
#time.sleep(10)
notification(projectName)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









