一、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