SonarQube 简介
SonarQube®是一种自动代码审查工具,可检测代码中的错误,漏洞和代码味道。它可以与您现有的工作流程集成,以实现跨项目分支和拉取请求的持续代码检查。
Code Quality and Code Security | SonarQube
可以对各种语言,几乎常用的主流语言都是支持的,所以一说到代码扫描就会学到sonaqube
开发人员在IDE开发代码,可以安装SonarLint插件进行提交前代码扫描,如果本地扫描没有问题那么将代码提交gitlab,当开发人员提交代码到版本控制系统中,自动触发jenkins进行代码扫描。(sonarlint最后也会连接到服务器sonarqube去扫描的)
开发人员将代码提交到版本控制系统之后,触发了ci工具,开始跑流水线跑管道,最后将扫描的结果传到sonarqube上面,最后将质量阈以及其他消息以邮件的方式通知用户。
代码扫描过程
开发人员 IDE 写代码 (SonarLint)
提交代码∶GitLab、SVN、Bitbucket (Build、UnitTest 、Sonar)
提交流水线∶CI Server (Jenkins/GitLabCI)
- 扫描成功
- 扫描失败∶ 邮件通知提交人
扫描报告
SonarQube平台安装配置
- SonarQube Server启动3个主要进程:
-
- Web服务器,供开发人员,管理人员浏览高质量的快照并配置SonarQube实例
- 基于Elasticsearch的Search Server从UI进行搜索服务。
- Compute Engine服务器,负责处理代码分析报告并将其保存在SonarQube数据库中,主要是es,做索引。
- SonarQube数据库要存储:SonarQube实例的配置(安全,插件设置等)项目,视图质量快照。
- 服务器上安装了多个SonarQube插件,可能包括语言,SCM,集成,身份验证和管理插件。
- 在持续集成服务器上运行一个或多个SonarScanner,以分析项目。(将最终扫描的结果推送到server上面去)
不同的语言有不同的代码规范和规则(以插件的形式体现),这些方式以什么方式体现出来的呢,都是以jar包的形式,每个语言都有其独立的jar包,装到server上面就可以使用这些规则的。所以整体组成就是上面四个部分。
## 创建数据目录
mkdir -p /data/cicd3/sonarqube/{sonarqube_conf,sonarqube_extensions,sonarqube_logs,sonarqube_data}
chmod 777 -R /data/cicd3/sonarqube/
## 运行
docker run -itd --name sonarqube \
-p 9000:9000 \
-v /data/cicd3/sonarqube/sonarqube_conf:/opt/sonarqube/conf \
-v /data/cicd3/sonarqube/sonarqube_extensions:/opt/sonarqube/extensions \
-v /data/cicd3/sonarqube/sonarqube_logs:/opt/sonarqube/logs \
-v /data/cicd3/sonarqube/sonarqube_data:/opt/sonarqube/data \
sonarqube:8.9.2-community
## 验证
docker logs -f sonarqube
## lib目录(低于SonarQube8.9.1可以配置持久化,以支持多分支插件。)
mkdir -p /data/cicd/sonarqube/sonarqube_lib
cd /data/cicd/sonarqube/sonarqube_lib
docker cp sonarqube:/opt/sonarqube/lib/* ./
docker run -itd --name sonarqube \
-p 9000:9000 \
-v /data/cicd2/sonarqube/sonarqube_conf:/opt/sonarqube/conf \
-v /data/cicd2/sonarqube/sonarqube_extensions:/opt/sonarqube/extensions \
-v /data/cicd2/sonarqube/sonarqube_logs:/opt/sonarqube/logs \
-v /data/cicd2/sonarqube/sonarqube_data:/opt/sonarqube/data \
-v /data/cicd2/sonarqube/sonarqube_lib:/opt/sonarqube/lib \
sonarqube:8.9.1-community
默认账号: admin/admin