SonarQube Easiest Practice
SonarQube 是一个开源的代码质量管理平台,覆盖了代码质量的7个维度:Potential bugs,Complexity,Unit tests、Dupliactions,Architecture & Design、Comments、Coding rules。由于本人刚接触SonarQube,本文仅介绍SonarQube平台的搭建及在Gradle构建脚本中使用sonarqube插件的简单实践,更深入的使用方法请参考SonarQube in Action。
安装MySQL
CentOS 7默认的仓库不包含MySQL数据库索引(默认为MariaDB),虽然MariaDB和MySQL的上层接口一致,但实践证实,SonarQube的确不支持MariaDB,于是这里介绍一下安装MySQL的过程。
$ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
$ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
$ sudo yum install mysql-server
# Start MySQL Server
$ sudo systemctl enable mysqld
$ sudo systemctl start mysqld
# Reset MySQL root password
$ mysql_secure_installation
安装SonarQube
SonarQube最新的LTS版本为5.6.3,需要系统上安装OpenJDK 8,在笔者的“同一系统安装多个Java版本”一文中对Java环境的配置做了介绍,此处不赘述。
创建SonarQube数据库账户
# 首先使用root账户连接到MySQL数据
$ mysql -u root -p
Enter password:
...
# 然后使用如下命令创建sonar账户
mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
mysql> FLUSH PRIVILEGES;
安装SonarQube
$ wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-5.6.3.zip
$ sudo unzip -d /usr/share sonarqube-5.6.3.zip
$ sudo ln -s /usr/share/sonar-5.6.3 /usr/bin/sonar
$ sudo ln -s /usr/bin/sonar/bin/linux-x86-64/sonar.sh /etc/init.d/sonar
配置并启动
编辑/usr/share/sonar-5.6.3/conf/sonar.properties
文件,如下:
# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
#----- MySQL 5.6 or greater
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported. It can not be changed.
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
启动SonarQube:
$ sudo service sonar start
Gradle and SonarQube
编辑项目的build.gradle
文件,添加如下内容:
plugins {
id "org.sonarqube" version "2.2"
}
sonarqube {
properties {
// 更多配置参考Reference 1
property "sonar.projectName", project.name
property "sonar.projectKey", "$project.group:$project.name"
property "sonar.sourceEncoding", "UTF-8"
}
}
添加gradle.properties
文件,内容如下:
# SonarQube服务器地址
systemProp.sonar.host.url=http://10.0.63.202:9000
# 下面的配置已经弃用了,即使加上也会被忽略
#systemProp.sonar.jdbc.url=sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
#systemProp.sonar.jdbc.username=sonar
#systemProp.sonar.jdbc.password=sonar
# 如果SonarQube设置了 Force user authentication,则需要提供用户名密码将结果同步给SonarQube Server
systemProp.sonar.login=admin
systemProp.sonar.password=admin
LDAP 认证配置
在 Update Center 下载下载 LDAP 插件并配置/usr/share/sonar-5.6.3/conf/sonar.properties
,添加如下内容:
# LDAP Configuration
sonar.security.realm=LDAP
sonar.security.savePassword=true
sonar.security.localUsers=admin
ldap.url=ldap://xxx.xxx.xxx.xxx:389
ldap.bindDn=uid=root,cn=users,dc=example,dc=com
ldap.bindPassword=secret
# User Configuration
ldap.user.baseDn=cn=users,dc=startimes,dc=me
# shodowExpire=-1 用来禁止失效用户登陆
ldap.user.request=(&(uid={login})(memberof=cn=gitlab-users,cn=groups,dc=example,dc=com)(shadowExpire=-1))
# sAMAccountName 用于 AD登陆
#ldap.user.request=(&(sAMAccountName={login})(memberof=cn=gitlab-users,cn=groups,dc=example,dc=com))
ldap.user.realNameAttribute=cn
ldap.user.emailAttribute=mail
# Group Configuration
#ldap.group.baseDn=cn=groups,dc=example,dc=com
#ldap.group.request=(&(memberUid={uid}))
#ldap.group.idAttribute=cn
Email 配置
Administration => General Settings => Email
几个值得注意的问题:
SMTP username
需要与From address
相同User secure connection
可能是plaintext
以上问题都可通过设置sonar.log.level=DEBUG
来查看,日志在 /usr/share/sonar-5.6.3/logs/sonar.log 中。