SonarQube6.7-windows环境配置与使用

SonarQube是一个开源的代码质量管理系统。其特点在wiki上解释的很详细,我就不再这里重述了。

下面直接奔主题,在windows环境中搭建SonarQube,之后解释如何上传代码与在SonarQube系统中查看代码质量相关指标信息;

一、环境依赖

1、Windows7 64bit;
2、搭建SonarQube6.7.2之前,要求JDK环境必须是JDK8(包含)以上;
3、数据库:我选择Mysql,要求5.6以上,其它数据库也支持,详见下方官方文档说明选择合适版本,其它数据库本人就不做介绍了;
4、浏览器:要求IE11以上、以及当前最新版Chrome,Firefox、Safari、Edge;
6、Maven:支持JDK8的版本要求在3.3以上;
至此,我本人所使用的软件环境是 JDK8 + SonarQube6.7.2 + MySQL5.7.17 + Maven3.5.2 + Chrome65.0.3325.181;
SonarQube6.7软件环境详细介绍文档入口

二、安装JDK8与数据库

1、JDK8的详细安装过程直接忽略,Google搜索一大堆;简单说就是下载 -> 安装 -> 配置系统环境变量-> 在windows终端验证”java -version”是否安装成功;
2、数据库为MySQL,直接安装即可,身为程序猿,如果不会安装MySQL的话就自行面壁思过好了。

三、安装SonarQube

1、下载

下载地址:https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.7.2.zip

2、配置

(1)在mysql中新建数据名为”sonar”,字符集是utf8,命令参考如下;

CREATE DATABASE `sonar` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;
配置专属用户名与密码权限此处忽略

(2)为Maven增加sonar配置
1)安装Maven详细过程忽略,简单介绍就是下载Maven压缩包,解压缩到合适目录中 -> 把Maven下bin添加到windows环境变量中 -> 在windows终端验证”mvn -v”是否安装成功;
2)定位到Maven目录下的conf/settings.xml,修改如下:
a)在

<pluginGroups>

标签内增加代码如下

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

b)在

<profiles>

标签内增加代码如下

<profile>
    <id>sonar</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <!-- 配置 Sonar Host地址,默认:http://localhost:9000 -->
        <sonar.host.url>
          http://127.0.0.1:9000/
        </sonar.host.url>
    </properties>
</profile>

保存完成!

(3)解压缩sonarqube-6.7.2.zip到你自己合适的目录中去;
修改:conf/sonar.properties,在第26后行新增一段MySQL配置代码

sonar.jdbc.username=用户名
sonar.jdbc.password=密码
sonar.jdbc.url=jdbc:mysql://127.0.0.1:端口号/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError

保存退出;
修改:conf/wrapper.conf
在第四行直接修改wrapper.java.command=JDK8的bin目录下java.exe绝对地址(注意是绝对地址、绝对地址、绝对地址重要事情说三遍)
保存退出;

(4)启动
打开软件定位到 /bin/windows-x86-64/StartSonar.bat,即可启动sonarqube;
注意:选择windows-x86-64是因为我自己的操作系统是windows 64bit,如果您的操作系统是windows32bit,请定位到/bin/windows-x86-32/StartSonar.bat下面;
在/bin/windows-x86-64/目录中,sonarqube还为我们增加为系统服务提供快捷入口,其中
InstallNTService.bat(安装sonarqube为系统服务);
StartNTService.bat(启动sonarqube系统服务);
StopNTService.bat(停止sonarqube系统服务)
UninstallNTService.bat(卸载sonarqube系统服务);

wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
... 中间省略5000字 ...
jvm 1    | 2018.04.10 09:48:37 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
jvm 1    | 2018.04.10 09:48:37 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up

在命名行界面中看到看到SonarQube is up的提示信息是,就表示SonarQube已经启动成功了(注意首次启动SonarQube需要1~2分钟左右,这是因为SonarQube需要创建数据库等必要的配置数据)。如果启动失败,请重复上面的步骤并同时检查一下人品,哈哈哈;

(6)安装SonarQube中文插件
打开页面地址:http://127.0.0.1:9000(默认端口号9000);
操作流程依次是:login -> 用户密码默认都是admin -> Administration -> Marketplace -> Chinese Pack 点击右侧Install;加载完成后,返回页面顶部,点击”Restart”重启系统,等待半分钟左右SonarQube即可完成重启,如下图所示则安装中文插件成功!

四、上传代码

IDE环境本人使用IntelliJ IDEA,上传代码方式使用Maven;测试代码结构如下图:

这个测试代码很简单,其中pom.xml、HelloWorld.java、HelloWorldTest.java为三个主要源码;三个文件源码如下:

(1)pom.xml完整代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>cn.littlebill</groupId>
  <artifactId>HelloWorld</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>

  <name>HelloWorld</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <jdk.version>1.8</jdk.version>
    <sonar.groovy.binaries>target/classes</sonar.groovy.binaries>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.7.0</version>
        <configuration>
          <source>${jdk.version}</source>
          <target>${jdk.version}</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>sonar-coverage</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <build>
        <pluginManagement>
          <plugins>
            <plugin>
              <groupId>org.jacoco</groupId>
              <artifactId>jacoco-maven-plugin</artifactId>
              <version>0.7.8</version>
            </plugin>
          </plugins>
        </pluginManagement>
        <plugins>
          <plugin>
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <configuration>
              <append>true</append>
            </configuration>
            <executions>
              <execution>
                <id>agent-for-ut</id>
                <goals>
                  <goal>prepare-agent</goal>
                </goals>
              </execution>
              <execution>
                <id>agent-for-it</id>
                <goals>
                  <goal>prepare-agent-integration</goal>
                </goals>
              </execution>
              <execution>
                <id>jacoco-site</id>
                <phase>verify</phase>
                <goals>
                  <goal>report</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

(2)src -> main -> java -> cn.littlebill.HelloWorld完整源码如下:

package cn.littlebill;

public class HelloWorld {
    public void coveredByUnitTest() {
        System.out.println("coveredByUnitTest1");
        System.out.println("coveredByUnitTest2");
    }

    public void coveredByIntegrationTest() {
        System.out.println("coveredByIntegrationTest1");
        System.out.println("coveredByIntegrationTest2");
        System.out.println("coveredByIntegrationTest3");
    }

    public void notCovered() {
        System.out.println("notCovered");
    }
}

(3)src -> test -> java -> cn.littlebill.HelloWorldTest完整源码如下:

package cn.littlebill;

import org.junit.Test;

public class HelloWorldTest {
    @Test
    public void test() {
        new HelloWorld().coveredByUnitTest();
    }
}

(4)写好代码后,打开终端定位到项目根目录,运行命名mvn clean install sonar:sonar,见如下GIF动画演示

五、查看项目代码质量

如下图,项目bugs、漏洞、坏味道、覆盖率、重复的质量考核内容一览无余;剩下的就是自己修改SonarQube提示的问题去吧!

查看单个项目详细信息截图:

如果修复完SonarQube提示的问题后,再次在项目根目录运行命名mvn clean install sonar:sonar后,在单个项目详细页面中,会提示这次最新提交与上几次提交的变化趋势(因为这次提交没有修改代码,新的问题自然就是0),很实用。赞

整个SonarQube6.7-windows环境配置与使用流程介绍完成,收工!

参考:sonarqube官方DEMO

发表评论

电子邮件地址不会被公开。 必填项已用*标注