一、前言
1、本文主要内容
- CentOS7下SonarQube部署
- Maven扫描Java项目并将扫描结果提交到SonarQube Server
- SonarQube扫描报表介绍
2、环境信息
工具/环境 |
版本 |
---|---|
CentOS |
CentOS 7.6(IP:192.168.88.45) |
SonarQube |
7.5 |
JDK |
1.8.0 |
MySQL |
5.7 |
3、准备工作
- 安装JDK1.8
参考:https://ken.io/note/centos-java-setup
- 安装MySQL
参考:https://ken.io/note/centos-mysql57-setup
二、部署SonarQube
1、基础准备
- 安装必要的软件包
yum install -y wget zip unzip
- 调整系统参数
sysctl -w vm.max_map_count=262144 sysctl -w fs.file-max=65536 ulimit -u 4096 sonarqube ulimit -n 65536 sonarqube
- 创建专用账号sonar
#创建账号并授权 useradd sonar passwd sonar #授予sudo权限 visudo #在文件末尾增加 sonar ALL=(ALL) ALL
sonar 7.5版本必须在非root账号下启动
2、准备数据库及账号
#进入mysql-shell mysql -u root -p #新建用户 CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'Sonar@2019'; CREATE USER 'sonar'@'%' IDENTIFIED BY 'Sonar@2019'; #新建数据库 CREATE DATABASE sonar; #赋予数据库访问权限 GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost'; GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%'; #刷新权限 FLUSH PRIVILEGES; #退出 quit;
3、下载
- 准备软件以及数据目录
mkdir -p /usr/sonar mkdir -p /sonar/data mkdir -p /sonar/temp
- 下载
#进入下载目录 cd /home/downloads #下载软件包 sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip #解压 sudo unzip sonarqube-7.5.zip -d /usr/sonar/
- 授权
#授予相关目录权限 chown -R sonar:sonar /usr/sonar chown -R sonar:sonar /sonar
4、配置环境变量
#修改profile文件 sudo vi /etc/profile #在文件末尾增加变量:SONAR_HOME export SONAR_HOME=/usr/sonar/sonarqube-7.5 #使变量生效 source /etc/profile #测试 echo $SONAR_HOME
5、配置Sonar
#修改配置文件 sudo vi $SONAR_HOME/conf/sonar.properties #在配置文件开头增加以下配置 #数据库配置 sonar.jdbc.username=sonar sonar.jdbc.password=Sonar@2019 sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useConfigs=maxPerformance&rewriteBatchedStatements=true&characterEncoding=utf8&useUnicode=true&serverTimezone=GMT%2B08:00 #文件配置 sonar.path.data=/sonar/data sonar.path.temp=/sonar/temp #Web配置 sonar.web.host=0.0.0.0 sonar.web.port=9000 sonar.web.context=/
这里要强调的是,端口号需要>1000
,因为sonar启动是使用的非root账号,默认是不能使用1000以下的端口的,否则会启动失败
6、开放端口
sudo firewall-cmd --add-port=9000/tcp --permanent sudo firewall-cmd --reload
7、启动Sonar
#切换到sonar账号 su sonar #启动 sh $SONAR_HOME/bin/linux-x86-64/sonar.sh start #启动完成会看到以下输出 Starting SonarQube... Started SonarQube. #如果未完成启动可以使用console命令查看启动过程中的问题 sh $SONAR_HOME/bin/linux-x86-64/sonar.sh console
sonar支持的启动参数: console | start | stop | restart | status | dump
如果启动完成,但是依然不能访问,可以通过以下命令查看启动日志
cat $SONAR_HOME/logs/web.log
成功启动后,可以访问 http://192.168.88.45:9000
这时候SonarQube会进行初始化,比如:初始化数据库。初始化完成后将看到首页
三、扫描项目示例
1、初始化Token
通过默认账号密码 admin
,admin
登录SonarQube,这时候会弹出引导
输入TokenName,然后点击Generate
就会生成token,点击Continue
然后选择Java-Maven项目,这时候
token创建后,一旦窗口关闭就不能查询,只能再次创建,所以我们要先将token复制下来保存。
token创建:http://192.168.88.45:9000/account/security/
2、项目准备
本次我们以Java项目作为示例进行扫描,本机需要配置好了Java&Maven环境 参考:https://ken.io/note/java-quickstart-sde
如果已有Java项目可以忽略这一步
- 创建项目
mvn archetype:generate -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DremoteRepositories=http://maven.aliyun.com/nexus/content/groups/public -DgroupId=io.ken.sonar -DartifactId=sonardemo -Dpackage=io.ken.sonar -Dversion=1.0
- 修改pom.xml
增加build节点,指定默认build动作以及JDK版本
<build> <defaultGoal>compile</defaultGoal> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
3、扫描并提交
#进入项目根目录 cd sonardemo #执行扫描 mvn sonar:sonar -Dsonar.host.url=http://192.168.88.45:9000 -Dsonar.login=8e359701283af794e8b77f3029863a1be7ad8ee4
扫描完成访问:http://192.168.88.45:9000
即可看到扫描结果
点击项目名字可以查看扫描详情
4、报表指标简介
指标 |
简介 |
---|---|
Bugs |
bug个数及评分 |
Vulnerabilities |
安全漏洞个数及评分 |
Debt |
债务(代码问题)持续时间 |
Code Smells |
轻微问题:代码风格等等 |
Coverage |
单元测试覆盖率 |
Duplications |
代码重复率 |
Duplicated Blocks |
代码重复块数 |
四、备注
1、附录
本文首发于我的独立博客:https://ken.io/note/sonarqube-install-and-code-scan-tutorial