Sonarqube安装配置及基本使用
以Python项目为例
环境安装配置
本地配置环境
按照官网文档入门教程,Sonarqube服务需要Java17环境,否则无法启动服务,报错如下。
-
下载安装Java17,Java下载地址: Java Archive Downloads - Java SE 17
-
配置环境变量JAVA_HOME, CLASSPATH
-
尝试启动 sonarqube服务,依然报如上错误,需要设置java虚拟机内存(设置为512M)后方解决上述错误。
但启动时报新错误(与elasticsearch有关 ):
由于sonarqube官方文档未明确说明需要配置elasticsearch,因此不考虑配置。
基于Docker(推荐)
-
下载安装Docker 安装完毕后需要重启 Windows
-
启动容器镜像 若无,则会自动拉取镜像,拉取完毕后自动启动容器
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
容器启动成功后可通过浏览器访问localhost:9000访问sonarqube服务,默认用户名和密码均为admin
基本使用
基本步骤:
-
登录SonarQube,使用初始密码登录后更改密码
-
创建新项目
新项目可以通过各种流行DevOps平台(Azure、Butbucket Server、Github、Gitlab等)导入 ,也可以手动导入。
-
分析项目
-
查看报告
-
修改代码、项目迭代
分析项目
一些术语
-
Technical debt:技术负债/技术债务
根据维基百科的定义:
技術負債(英語:Technical debt),又譯技術債,也稱為設計負債(design debt)、 程式碼負債(code debt),是程式設計及軟體工程中的一個比喻。指開發人員為了加速軟 件開發,在應該採用最佳方案時進行了妥協,改用了短期內能加速軟件開發的方案,從而在 未來給自己帶來的額外開發負擔。這種技術上的選擇,就像一筆債務一樣,雖然眼前看起來 可以得到好處,但必須在未來償還。軟體工程師必須付出額外的時間和精力持續修復之前的 妥協所造成的問題及副作用,或是進行重構,把架構改善為最佳實作方式。
常见技术负债原因:
不充足的事前定义 商务压力 缺少流程或理解 紧耦合组件 缺少测试套件 缺少文档 缺乏合作 拖延重构 缺少知识 技术领导力差 ...
-
Code Smell:代码异味/代码坏味道
根据维基百科的定义:
程式開發領域,代碼中的任何可能導致深層次問題的症狀都可以叫做代碼異味。 通常,在對 代碼做簡短的回饋迭代時,代碼異味會暴露出一些深層次的問題,這裡的回饋迭代,是指以 一種小範圍的、可控的方式重構代碼。基於這些暴露的問題,人們會進一步的檢查設計和代碼 中是否還存在別的代碼異味,然後再做進一步的重構。
常见代码异味:
代码重复 长方法 巨类 参数过多 特性依赖 人为的复杂 ......
-
Vulnerability, 脆弱性/漏洞; HotSpot,热点
热点和漏洞的主要区别在于,在是否修改程序之前是否需要进行审查。 热点会突出显示对安全敏感的代码片段,但可能不会影响整个应用程序的安全性,只是对可能存在 的风险提出警示。是否有害安全性取决于开发人员对代码进行审查后的决定,确保不影响程序 安全性的情况下可以不修改代码。 漏洞意味着发现了影响应用程序安全性的问题,需要立即修复。
-
…
质量指标及合格基准
SonarQube主要针对以下维度对代码进行评价,每一个维度都有细分的评价子维度(与指定 的规则库相关)
-
可靠性
-
安全性
-
安全热点回顾
突出需要检查的安全敏感代码段
-
可维护性
-
测试覆盖率
-
重复行数
分析步骤
1. 下载扫描工具SonarScanner
2. 在项目目录中执行代码扫描脚本
示例命令如下:
C:\Users\Administrator\Downloads\sonar-scanner-cli-4.8.0.2856-windows\sonar-scanner-4.8.0.2856-windows\bin\sonar-scanner.bat -D"sonar.projectKey=RSDataGet" -D"sonar.sources=." -D"sonar.host.url=http://localhost:9000" -D"sonar.token=sqp_0709400c95442657a158cfbe9104c7213b4007e6"
3. 查看分析报告
SonarQube通过统计数据和可视化图表展示代码审计结果。
4. 解决问题
审查安全热点
如果确认代码无安全性问题,更改代码状态为“Safe”
代码测试覆盖率提高
-
使用测试覆盖率工具生成测试报告文档,如使用coverage
coverage run <program> args coverage xml -o coverage.xml
-
在项目根目录的sonar-project.properties文件指定测试报告文档地址(详情参考文档Python-test-coverage)
sonar.projectKey=<sonar-project-key> ... sonar.python.coverage.reportPaths=coverage.xml
-
使用SonarQube执行代码审查 可以看到,代码覆盖率信息也被纳入到测试报告中
参考资料
[Coverage & Test Data](Generate Reports for Apex, C/C++, Objective-C, Go, JS/TS and Python](https://community.sonarsource.com/t/coverage-test-data-generate-reports-for-apex-c-c-objective-c-go-js-ts-and-python/9687)