Skip to content

SonarQube安装与使用

安装过程

备注:数据库不要使用MariaDB;不要使用root用户安装,es会启动失败

# 安装java环境
yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -y

# 安装数据库
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
rpm -ivh mysql57-community-release-el7-10.noarch.rpm
yum install mysql-community-server.x86_64 -y

# 配置数据库
systemctl start mysqld.service

# 数据库初始密码
grep "password" /var/log/mysqld.log

# 修改数据库密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

# 创建数据库sonar
create database sonar;

# 下载,从这里开始应该使用普通用户操作
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.3.zip

# 解压
unzip sonarqube-7.3.zip && cd sonarqube-7.3/

# 修改配置文件
vim ./conf/sonar.properties
# 取消注释如下三行,并添加数据库账号密码

sonar.jdbc.username=root
sonar.jdbc.password=password

sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false


# 如果java环境是配置安装的,需要指定java环境:vim sonarqube-7.7/conf/wrapper.conf

# 启动sonarqube
./bin/linux-x86-64/sonar.sh start

# 访问:http://10.10.10.12:9000/sessions/new
# 账号:admin 密码:admin

# 重启服务
./bin/linux-x86-64/sonar.sh restart

sonarqube-1

sonarqube-2

使用过程

汉化

在Administration菜单栏,选择Marketplace标题,在搜索框输入chinese进行搜索,然后进行安装

sonarqube-3

完成后会提示重启服务

sonarqube-4

Sonar Scanner

# 任意用户均可
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.2.0.1227-linux.zip

# 解压
unzip sonar-scanner-cli-3.2.0.1227-linux.zip

# 添加环境变量
cd sonar-scanner-3.2.0.1227-linux/
vim /etc/profile

export SONAR_SCANNER_HOME=/home/bloodzer0/sonar-scanner-3.2.0.1227-linux
export PATH=$PATH:$SONAR_SCANNER_HOME/bin

source /etc/profile

# 验证安装
sonar-scanner -v

sonarqube-5

Sonar Scanner分析项目

点击项目--分析新项目

sonarqube-6

JS、Python、PHP

sonar-scanner \
  -Dsonar.projectKey=security-test \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://10.10.10.12:9000 \
  -Dsonar.login=token

测试sqlmap项目:

git clone https://github.com/sqlmapproject/sqlmap.git
cd sqlmap

# 执行上面的代码
# 分析完成后,在web界面查看分析结果

sonarqube-7

Java-Maven

mvn sonar:sonar \
  -Dsonar.host.url=http://10.10.10.12:9000 \
  -Dsonar.login=token

Java-Gradle

# 在build.gradle文件中声明
plugins {
  id "org.sonarqube" version "2.6"
}

# 然后执行命令
./gradlew sonarqube \
  -Dsonar.host.url=http://10.10.10.12:9000 \
  -Dsonar.login=token

C#或VB.NET

SonarScanner.MSBuild.exe begin /k:"test" /d:sonar.host.url="http://10.10.10.12:9000" /d:sonar.login="token"

MsBuild.exe /t:Rebuild

SonarScanner.MSBuild.exe end /d:sonar.login="token"

使用配置文件进行扫描

在项目目录新建sonar-project.properties文件

# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=My project
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set. 
sonar.sources=.

# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8

集成Gitlab-CI做自动化扫描

gitlab-ci.yml文件内容

sast:
  stage: test
  script:
    - sonar-scanner -Dsonar.host.url=http://10.10.10.12:9000 -Dsonar.login=token -Dsonar.issuesReport.console.enable=True -Dsonar.projectKey=$CI_PROJECT_NAME -Dsonar.java.binaries=$PWD
  tags:
    - sec
  only:
    - master

sonarqube-2

根据SonarQube结果执行pipelines

  • 配置sonar质量阈;
  • gitlab ci 判断 sonar的执行状态;

sonarqube-3

if curl http://10.10.10.5:9000/api/qualitygates/project_status?projectKey=go-language: | grep 'ERROR'; then echo "error" exit 1; fi

参考资料

SonarQube之gitlab-plugin配合gitlab-ci完成每次commit代码检测