Sonarqube 安装说明
- 安装 Docker
- 下载镜像
docker pull sonarqube:lts
docker pull mysql:5.6.43
- 启动mysql,root账号登录
docker run --name mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.6.43 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- 创建数据库
mysql -uroot -proot -h127.0.0.1 -P3308
create database sonar default charset utf8mb4;
- 创建 /home/admin/sonarqube目录(这个目录用来映射docker container里的一些数据)
- 启动docker容器(要将数据库连接方式修改一下)
docker run --name sonar -p 9001:9000 \
-v /home/admin/sonarqube/conf:/opt/sonarqube/conf \
-v /home/admin/sonarqube/data:/opt/sonarqube/data \
-v /home/admin/sonarqube/logs:/opt/sonarqube/logs \
-v /home/admin/sonarqube/extensions:/opt/sonarqube/extensions \
-e sonar.jdbc.username=root \
-e sonar.jdbc.password=root \
-e sonar.jdbc.url="jdbc:mysql://172.22.152.150:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useSSL=false" \
sonarqube:lts
注意,不要用 127.0.0.1:3308,得是当前机器的IP。
- 进入 http://127.0.0.1:9001/
- 启动完成。初始密码admin/admin
静态报告推送
配置
配置 Maven 的 settings.xml文件,路径一般在 ~/.m2/settings.xml
<settings>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- 配置 Sonar Host地址,默认:http://127.0.0.1:9000 -->
<sonar.host.url>
http://127.0.0.1:9001
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
这里的 sonar.host.url 配置成远端的Sonarqube,然后执行下面的命令,就可以看到代码静态分析结果了,不一定要自己安装Sonarqube。
注意:是 settings.xml,不是 setting.xml。
执行命令
在工程根目录,执行
mvn clean verify sonar:sonar 或 mvn clean install sonar:sonar
SonarQube安装问题和处理
问题1
NoRouteToHostException: No route to host (Host unreachable)导致连不上数据库
解决办法
因为防火墙禁止了,在/etc/sysconfig/iptables添加下面两个规则:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 9001 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3308 -j ACCEPT
然后重启iptables:
systemctl restart iptables
问题2
Error response from daemon: driver failed programming external connectivity on endpoint sonar (f5e2d3db9c89b222d7ae7716ab60a138f321c58cd75b8bd8a83c34a57604c514): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9001 -j DNAT --to-destination 172.18.0.3:9000 ! -i docker0: iptables: No chain/target/match by that name.
解决办法
yum install bridge-utils
ifconfig docker0 down
brctl delbr docker0
然后重启docker:
systemctl restart docker
docker start mysql
docker start sonar
SonarLint 插件
Intellij IDEA 有一个 SonarLint 的插件,可以在写代码的时候提醒我们注意代码质量问题。