SonarQube入门【转】

时间:2019-08-16
本文章向大家介绍SonarQube入门【转】,主要包括SonarQube入门【转】使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、SonarQube简介
Sonar 是一个用于代码质量管理的开放平台。通过插件机制,Sonar可以集成不同的测试工具,代码分析工具, 以及持续集成工具。 比如pmd-cpd、checkstyle、findbugs、Jenkins。 通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。
此外,Sonar 的插件还可以对 Java 以外的其他编程语言(支持的语言包括:Java、PHP、C#、C、Cobol、PL/SQL、Flex等)提供支持, 对国际化以及报告文档化也有良好的支持。 可以说Sonar是目前最强大的代码质量管理工具之一。
SonarQube和SonarQube Runner之间的关系。SonarQube是服务器端,它主要有两个功能:1.分析源代码;2.因为它内嵌了Apache模块,所以提供Web端的界面访问。SonarQube Runner是一个利用SonarQube服务端分析代码的命令行工具,可以把它简单理解为客户端。

二、SonarQube安装
1、数据库配置

mysql>  CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.11 sec)
mysql> CREATE USER 'sonar' IDENTIFIED BY '*****';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY '*****';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY '******';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)
mysql> \q
Bye
 

2、配置sonar

[root@vm1 ~]# wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.3.zip
[root@vm1 ~]# mv sonarqube-6.7.3.zip /usr/local/
[root@vm1 ~]# cd /usr/local/
[root@vm1 local]# unzip sonarqube-6.7.3.zip
[root@vm1 local]# ln -s sonarqube-6.7.3 sonar
[root@vm1 ~]# cd /usr/local/sonar/conf/
[root@vm1 conf]# vim sonar.properties 
[root@vm1 conf]# grep -Pv "^(#|$)" sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=*****
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.host=0.0.0.0
sonar.web.port=9000
 

Sonar-scanner 下载址:
wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.1.0.1141-linux.zip
https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
https://docs.sonarqube.org/display/SCAN

2、配置SonarQube Runner
下载地址:http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip

[root@vm1 ~]# mv sonar-runner-dist-2.4.zip /usr/local/
[root@vm1 ~]# cd /usr/local/
[root@vm1 local]# unzip sonar-runner-dist-2.4.zip 
Archive:  sonar-runner-dist-2.4.zip
   creating: sonar-runner-2.4/
   creating: sonar-runner-2.4/bin/
  inflating: sonar-runner-2.4/bin/sonar-runner.bat  
  inflating: sonar-runner-2.4/bin/sonar-runner  
   creating: sonar-runner-2.4/conf/
  inflating: sonar-runner-2.4/conf/sonar-runner.properties  
   creating: sonar-runner-2.4/lib/
 extracting: sonar-runner-2.4/lib/sonar-runner-dist-2.4.jar  
[root@vm1 local]# ln -s ln -s sonar-runner-2.4 sonar-runner
[root@vm1 local]# cd sonar-runner/conf/
[root@vm1 conf]# vim sonar-runner.properties 
[root@vm1 conf]# grep -Pv "^(#|$)" sonar-runner.properties
sonar.host.url=http://localhost:9000
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
sonar.jdbc.username=sonar
sonar.jdbc.password=*****
sonar.login=admin
sonar.password=admin
[root@vm1 conf]#

[root@vm1 ~]# vim /etc/profile
JAVA_HOME=/usr/java/latest
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export TIME_STYLE='+%Y/%m/%d %H:%M:%S'
export SONAR_HOME=/usr/local/sonar
export SONAR_RUNNER_HOME=/usr/local/sonar-runner
PATH=$SONAR_HOME/bin:$SONAR_RUNNER_HOME/bin:$JAVA_HOME/bin:$PATH
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JAVA_HOME

[root@vm1 conf]# source /etc/profile
 

3、启动SonarQube
用root无法启动lSonarQube,需要另外新建普通用户来启动

[root@vm1 sonar]#  useradd esadmin
[root@vm1 sonar]# cd ..
[root@vm1 local]# chown -R esadmin.esadmin sonarqube-6.7.3
[root@vm1 local]# vim sonar/elasticsearch/config/elasticsearch.yml
[root@vm1 local]# grep -Pv "^(#|$)" sonar/elasticsearch/config/elasticsearch.yml 
network.host: 192.168.60.119
http.port: 9200
[root@vm1 local]#
[root@vm1 local]# su esadmin
[esadmin@vm1 local]$ cd sonar
[esadmin@vm1 sonar]$ bin/linux-x86-64/sonar.sh start
[esadmin@vm1 sonar]$ tail -f logs/sonar.log 
2018.05.21 19:51:06 INFO  app[][o.s.a.SchedulerImpl] Process[es] is up
2018.05.21 19:51:06 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/usr/local/sonarqube-6.7.3]: /usr/java/jdk1.8.0_172-amd64/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/usr/local/sonarqube-6.7.3/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:/usr/local/sonarqube-6.7.3/lib/jdbc/mysql/mysql-connector-java-5.1.42.jar org.sonar.server.app.WebServer /usr/local/sonarqube-6.7.3/temp/sq-process6994721675375568509properties
2018.05.21 19:51:38 INFO  app[][o.s.a.SchedulerImpl] Process[web] is up
2018.05.21 19:51:38 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/usr/local/sonarqube-6.7.3]: /usr/java/jdk1.8.0_172-amd64/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/usr/local/sonarqube-6.7.3/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:./lib/ce/*:/usr/local/sonarqube-6.7.3/lib/jdbc/mysql/mysql-connector-java-5.1.42.jar org.sonar.ce.app.CeServer /usr/local/sonarqube-6.7.3/temp/sq-process5555492575408452898properties
2018.05.21 19:51:54 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
2018.05.21 19:51:54 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up
[esadmin@vm1 sonar]$ lsof -i:9000
COMMAND   PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    22595 esadmin  116u  IPv6 105980      0t0  TCP *:cslistener (LISTEN)
[esadmin@vm1 sonar]$
[root@vm1 local]# firewall-cmd --zone=public --add-port=9000/tcp --permanent 
success
[root@vm1 local]# firewall-cmd --reload
    success
[root@vm1 local]#
 

4、使用浏览器就可以直接登陆
在浏览器地址栏输入: http://sonarqube_server_ip:9000/

5、SonarQube与maven结合
maven的setting.xml 配置如下:

    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>

    <profiles>

        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                  http://192.168.40.119:9000
                </sonar.host.url>
            </properties>
        </profile>

        ......
    </profiles>

mvn sonar:soanr

6、SonarQube与Jenkins配合
方法1:Jenkins -->调用maven --> 在maven的settings.xml文件中指定SonarQube的地址,最后在Jenkins 项目构建时 使用 maven clean deploy sonar:sonar 参数,如下图所示:

方法2: 在Jenkins中下载sonar插件,目前插件为 SonarQube Scanner for Jenkins。安装完成后,在 系统管理->系统设置中,找到SonarQube servers模块,填写服务器信息,如下所示:

上图中的token 是从SonarQube复制并粘贴过来的,如下所示:

在项目的根目录下添加文件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
# The value of the property must be the key of the language.
sonar.language=java
# Additional parameters
sonar.my.property=value

sonar-scanner

export SONAR_SCANNER_OPTS="-Xmx512m"

SonarLint相当于sonar的一个插件,它及时反馈给开发人员新的bug和质量问题。是常用IDE的一个扩展。如Eclipse、VS、IntelliJIDEA。

wget -c http://repo1.maven.org/maven2/org/codehaus/sonar-plugins/l10n/sonar-l10n-zh-plugin/1.8/sonar-l10n-zh-plugin-1.8.jar

[esadmin@vm1 source]$ git clone https://github.com/SonarSource/sonar-scanning-examples.git
[esadmin@vm1 source]$ cd sonar-scanning-examples/sonarqube-scanner
[esadmin@vm1 sonarqube-scanner]$ ls
copybooks  coverage-report  sonar-project.properties  src
[esadmin@vm1 sonarqube-scanner]$ /usr/local/sonar-scanner/bin/sonar-scanner

总结:其中注意的地方:
(1)安装sonar以前必须,安装好jdk和 mysql数据库。
(2)jdk的版本影响着sonar版本,所以下载的时候需要注意(Sonar5.6以上版本需要JDK1.8)
(3)注意配置文件中配置信息要求。注意有三个配置文件需要去配置一下,sonar.properties,配置文件主要是配置数据库信息。因为,sonar产生的报告信息, 是存储在数据库中的。
sonar-scanner.properties,配置文件,主要是关联服务器sonar和数据库信息。第三个配置文件任然是上面这一样的名字,是配置在项目中的配置文件。管理项目和客户端的连接。
(4)那就是用到的命令、启动sonar服务器我们直接在bin启动就可以了,需要注意的命令。验证客户端是否安装成功sonar-scanner -version 然后就是我们主要的命令。sonar-scanner 用来加载项目进入服务器sonar中。
(5)一个 输入URL http://localhost:9000

三、补充sonarqube-7.3

[root@nexus ~]# cd /usr/local/src/
[root@nexus src]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.3.zip
[root@nexus src]# unzip sonarqube-7.3.zip
[root@nexus src]# ln -s sonarqube-7.3 sonarqube
[root@nexus src]# grep sonar /etc/passwd
sonar:x:1021:1022::/home/sonar:/bin/bash
[root@nexus src]# chown -R sonar.sonar sonarqube-7.3
[root@nexus src]# cd sonarqube/conf
[root@nexus conf]# vim sonar.properties
[root@nexus conf]# grep -Pv "^($|#|;)" sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.port=10000    #默认9000,由于本机9000已被占用 本例改为10000
[root@nexus conf]#  mysql -usonar -psonar sonar -hlocalhost  #测试连接mysql的username、password、dbName ;sonar7.3 要求 MySQL >=5.6 && <8.0
[root@nexus conf]# ln -s /usr/local/src/sonarqube-7.3/bin/linux-x86-64/sonar.sh /etc/init.d/sonar
[root@nexus conf]# vim /etc/init.d/sonar
[root@nexus conf]# grep -A 2 RUN_AS_USER=sonar /etc/init.d/sonar
RUN_AS_USER=sonar
LimitNOFILE=65536
LimitNPROC=2048
[root@nexus conf]# (添加以上三行)
[root@nexus conf]# grep SONAR_HOME /etc/profile
export SONAR_HOME=/usr/local/src/sonarqube
export PATH=$PATH:$SONAR_HOME
[root@nexus conf]#
[root@nexus conf]# service sonar start
[root@nexus conf]# lsof -i:10000
COMMAND   PID  USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
java    18831 sonar  116u  IPv4 1429389507      0t0  TCP *:ndmp (LISTEN)
[root@nexus conf]#
[root@nexus conf]# cd /etc/nginx/conf.d
[root@nexus conf.d]# cat sonar.conf
upstream sonar-node {
    server 127.0.0.1:10000;
}
server {
    listen 80;
    server_name sonar.2dupay.com;
    access_log /var/log/nginx/sonar/access.log;
    error_log /var/log/nginx/sonar/error.log;
    location / {
        proxy_pass http://sonar-node;
    }
       allow 192.168.20.0/24;
       deny all;
}
[root@nexus conf.d]# nginx -s reload

转自

SonarQube-WorkNote-51CTO博客 https://blog.51cto.com/caiyuanji/2124671

原文地址:https://www.cnblogs.com/paul8339/p/11365277.html