Skip to main content

SonarQube

目的

本文描述 SonarQube 安装部署步骤以及简单的配置与使用方法。

环境与软件

本章内容安装及运行所需软件: |项目|版本|说明| |:---|:---:|:---| |OpenJDK 11|1.11.0|Java 开发工具包| |PostgreSQL 12|12.0|关系型数据库管理系统| |SonarQube Community|8.7.1.42226|持续集成工具|

安装部署

安装 OpenJDK 11

sudo yum install -y java-11-openjdk-devel.x86_64

安装 PostgreSQL 12

安装 PostgreSQL 12:

sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql12-server postgresql12

初始化数据库:

sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl enable postgresql-12
sudo systemctl start postgresql-12

初始用户名为 postgres,初始密码为空,通过以下方式设置密码:

sudo -i -u postgres
psql
-- 设置 postgres 用户的密码
\password postgres
-- 退出 PostgreSQL Shell
\q

posggres 用户的 Home 路径为 /var/lib/pgsql,数据库文件位于 /var/lib/pgsql/12/data 下,编辑文件 /var/lib/pgsql/12/data/pg_hba.conf,将以下内容:

host  all  all  127.0.0.1/32  ident

替换为:

host  all  all  127.0.0.1/32  md5

若需要从其他终端访问,则需要编辑 /var/lib/pgsql/12/data/postgresql.conf,找到并设置 listen_addresses

listen_address = '*'

然后重新启动 PostgreSQL 服务:

sudo systemctl restart postgresql-12

登录到 PostgreSQL 并创建 SonarQube 数据库:

psql -U postgres -d postgres -h 127.0.0.1 -W
CREATE DATABASE sonarqube;
\q

更新安全配置(以使非 root 用户能够使用 Elasticsearch)

编辑文件 /etc/sysctl.conf,添加以下内容:

vm.max_map_count=655360

编辑文件 /etc/security/limits.conf,添加以下内容:

someone hard nofile 65535
someone soft nofile 65535

注意:将 someone 替换为实际用户名或通配符 *

执行以下命令更新配置:

sysctl -p

下载 SonarQube Community

下载页面:https://www.sonarqube.org/downloads/

下载链接:https://www.sonarqube.org/success-download-community-edition/

启动 SonarQube

在扫描服务器上解压缩下载的文件。

编辑 conf/wrapper.conf,将 wrapper.java.command 更新为 Java 11 命令的地址:

wrapper.java.command=/usr/lib/jvm/java-11-openjdk-11.0.8.10-0.el7_8.x86_64/bin/java

编辑 conf/sonar.properties,设置 PostgreSQL 的用户名密码及 JDBC 连接字符串:

sonar.jdbc.username=postgres
sonar.jdbc.password=Pa5sW0rd
sonar.jdbc.url=jdbc:postgresql://127.0.0.1:5432/sonarqube?currentSchema=public

bin/linux-x86-64 路径下执行以下命令启动 SonarQube 服务:

注:需使用非 root 用户启动服务

./sonar.sh console 1>SonarQube.log 2>&1 &

默认端口为 9000,默认用户名及密码均为 admin

配置与使用

为 SonarQube 安装插件

通过 Administration → Marketplace → Plugins 查找并安装插件,如:

插件说明
CheckstyleJava 静态代码检查工具
FindbugsJava 静态代码检查工具
GroovyGroovy 源文件检查工具
PMDJava 静态代码检查工具
ShellCheck AnalyzerShell 脚本检查工具
YAML AnalyzerYAML 检查工具

Maven 的 SonarQube 插件配置

在项目的 pom.xml 中加入 Sonar 插件(锁定 Sonar 版本):

<project>
<!-- ... -->
<build>
<!-- ... -->
<plugins>
<!-- ... -->
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.7.0.1746</version>
</plugin>
</plugins>
<!-- ... -->
</build>
<!-- ... -->
</project>

执行以下命令使用指定版本的 Sonar 对代码进行扫描:

mvn compile org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar -Dsonar.host.url=http://10.211.55.103:9000

执行以下命令使用最新版本的 Sonar 对代码进行扫描:

mvn compile sonar:sonar -Dsonar.host.url=http://sonar.example.com:9000

通过在 Maven 的 settings.xml 中添加 Sonar 服务器信息,可以省略 sonar.host.url 参数:

<settings>
<!-- ... -->
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<sonar.host.url>http://sonar.example.com:9000</sonar.host.url>
</properties>
</profile>
</profiles>
<!-- ... -->
</settings>

如果发生内存不足错误(java.lang.OutOfMemoryError),则可尝试设置以下环境变量:

export MAVEN_OPTS="-Xmx512m"

为 IntelliJ IDEA 安装 SonarQube Community 插件

通过 Preferences → Plugins → Marketplace 查找 SonarQube Community Plugin,安装并重启 IntelliJ IDEA。

通过 Preferences → Other Settings → SonarQube 添加 SonarQube 服务器信息。

通过菜单项 Analyze → Inspect Code... 执行代码检查。