一、SonarQube 介绍
SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码风格问题,缺乏单元测试等问题, 并通过一个web ui展示出来。
二、SonarQube支持的语言
三、SonarQube使用
1、Java
https://docs.sonarqube.org/latest/analysis/languages/java/
2、Golang
gometalinter与SonarQube的配合
https://docs.sonarqube.org/latest/analysis/languages/go/
https://github.com/uartois/sonar-golang
3、JavaScript
https://docs.sonarqube.org/latest/analysis/languages/javascript/
四、落地效果
sonar扫描作为CI门禁的一环落地效果如下:
1,飞书机器人通知sonar扫描结果,成功与失败分别如下图所示
2,报告展示:
3,python处理sonar结果关键代码
def get_sonar_result(sonar_project):
"""获取sonar扫描结果"""
from app.libs.sonar import SonarClient
try:
# 处理sonar扫描状态
_status_response = SonarClient().get_quality_gates_project_status(sonar_project)
_status = _status_response.get('projectStatus', {}).get('status')
_conditions = _status_response.get('projectStatus', {}).get('conditions')
# 组装质量阈状态字符串
_conditions_str = [
f"<font color='{'green' if _item.get('status') == 'OK' else 'red'}'>" +
f"{VIOLATION.get(_item.get('metricKey'))}: " +
f"{_item.get('actualValue')} / {_item.get('errorThreshold')}</font>" for _item in _conditions
]
# 组装结果字符串
_result = f"{'✅ 通过' if _status == 'OK' else '❌ 不通过'}"
if len(_conditions_str) > 0:
_result += f"\n**{'; '.join(_conditions_str)}**"
return _result
except Exception as err:
logger.error(f'获取Sonar数据异常, ErrMsg:{err}', )
return '未获取到扫描结果'