一、sonarqube代码分析技术体系
1、代码分析工具
IDE 辅助功能
- xcode、android studio
- 阿里巴巴 java 开发手册 ide 插件支持
独立的静态分析工具
- spotbugs、findbugs、androidlint、scan-build、Checkstyle、FindSecBugs
- pmd 阿里巴巴 java 开发手册 pmd 插件
综合性的代码分析平台
- sonarqube 功能强大,数据分析全面
2、代码分析技术架构
代码静态检查
-  代码分析:通过分析语法树和源代码,检查代码规范 - lint 系列 style 系列 pmd
- antlr
 
-  编译器分析:借助于编译器获得代码关系 
字节码静态分析
- 分析 jar、war、dex 等格式的文件,代表工具:findbugs asm
3、语法树分析技术

4、字节码分析技术 Java 与 Kotlin 源代码

5、SonarQube
代码质量和安全的领先产品
 17种语言的静态代码分析
 检测Bug和漏洞
 查看安全热点
 跟踪代码气味并修复您的技术债务
 代码质量度量和历史
 CI/CD集成
 可扩展,具有50多个社区插件

6、代码分析主要指标

7、代码分析细节指标

8、度量指标总结
可靠性 bugs
 可维护性 code smells
 安全性 Vulnerabilities Security Hotspots
 覆盖率 Coverage Unit Tests
 代码重复 Duplications
 代码规模 Lines of Code Comments rate
 复杂度 Cyclomatic Complexity Cognitive Complexity

9、独立分析平台使用案例

10、持续集成使用案例

11、Sonarqube经典案例分析

 

目前大部分公司都采用了 sonarqube,它的概念和技术指标已经成为行业事实上的标准
二、代码审计 SonarQube 平台搭建
1、sonarqube 技术架构

2、正式环境部署
1、创建网络
[root@mylinux1 ~]# docker network create sonarqube
1f22eb6dc8bb5b640a87d74bbc7a9d7f783b3dde0325bffecd74038eb9aebf69
2、创建数据库容器实例
-e POSTGRES_USER=sonarqube:设置数据库用户名
-e POSTGRES_PASSWORD=sonarqube:设置数据库密码
-e PGDATA=/var/lib/postgresql/data/pgdata:指定数据库的位置
-v $PWD/postgresql_data:/var/lib/postgresql/data:把数据映射到当前目录下的postgresql_data中:即使容器销毁了,重新创建一个,数据不会丢
docker run -d \--name sonarqube_postgres \--network sonarqube \-e POSTGRES_USER=sonarqube \-e POSTGRES_PASSWORD=sonarqube \-e PGDATA=/var/lib/postgresql/data/pgdata \-v $PWD/postgresql_data:/var/lib/postgresql/data \postgres
3、创建sonarqube容器实例
创建sonarqube容器实例,可以通过-Xms4g -Xmx4g增加下ES的堆内存大小
 mac环境需要加 -e SONAR_SEARCH_JAVAADDITIONALOPTS=“-Dbootstrap.system_call_filter=false”
platform linux/x86_64:在mac上需要加这条命令
-e SONARQUBE_JDBC_USERNAME=sonarqube
-e SONARQUBE_JDBC_PASSWORD=sonarqube \:设置数据库的用户名和密码
-v $PWD/sonarqube_data:/opt/sonarqube/data
-v $PWD/sonarqube_extensions:/opt/sonarqube/extensions
-v $PWD/sonarqube_logs:/opt/sonarqube/logs \:宿主机和容器映射
docker run -d  \--name sonarqube_hogwarts \--platform linux/x86_64 \-p 9000:9000 -p 9092:9092 \--network sonarqube \--user $(id -u):$(id -g) \-e SONARQUBE_JDBC_USERNAME=sonarqube \-e SONARQUBE_JDBC_PASSWORD=sonarqube \-e SONARQUBE_JDBC_URL="jdbc:postgresql://sonarqube_postgres/sonarqube" \-e SONAR_SEARCH_JAVAADDITIONALOPTS="-Dbootstrap.system_call_filter=false -Xms1g -Xmx1g" \-e SONARQUBE_WEB_JVM_OPTS="-Xms2g -Xmx2g" \--ulimit nofile=524288:524288 \-v $PWD/sonarqube_data:/opt/sonarqube/data \-v $PWD/sonarqube_extensions:/opt/sonarqube/extensions \-v $PWD/sonarqube_logs:/opt/sonarqube/logs \sonarqube
4、检查容器启动成功
[root@mylinux1 ~]# docker ps
CONTAINER ID   IMAGE                       COMMAND                   CREATED              STATUS              PORTS                                                                                  NAMES
de81187b3504   sonarqube:8.9.2-community   "bin/run.sh bin/sona…"   About a minute ago   Up About a minute   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 0.0.0.0:9092->9092/tcp, :::9092->9092/tcp   sonarqube_hogwarts
532e9ed4212d   postgres                    "docker-entrypoint.s…"   9 minutes ago        Up 9 minutes        5432/tcp                                                                               sonarqube_postgres
60ed0289df5b   registry:2                  "/entrypoint.sh /etc…"   4 months ago         Up 42 hours         0.0.0.0:5000->5000/tcp, :::5000->5000/tcp  
5、环境配置
默认账号 admin:admin
 生成 token
 划分组与用户
登录页面
 
 首页
 
 projects:项目列表(大部分项目是自动创建)
 issues:发现的问题
 rules:制定的规则
 quality profiles::定制规则
 quality gates:质量门禁
 administration:管理
6、环境变量设置
为了方便命令复用,后面命令中可变内容使用环境变量来表示 $SQ_HOST
[root@mylinux1 ~]# SQ_TOKEN=22df457ac0dc32269a36868645490a85a357d44118
[root@mylinux1 ~]# SQ_HOST=http://192.168.22.3:9000