Sonar静态代码扫描落地CI门禁

一、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 '未获取到扫描结果'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hera酱

感谢你为测试技术发展做的贡献~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值