Souar结合项目使用

 1.项目环境:

 系统:Ubuntu 16.04

JDK: openjdk8

Java开发工具: Intellij  IDEA 2017.2.6,  Maven 3.4+ ,  代码管理GitKraken,  数据库Mysql , 数据库ORM  MyBatis

部署工具: Docker, Jenkins

项目技术: SpringBoot 微服务模式, SpringCloud : Eureka 服务注册&发现, Robin 客户端负载均衡, Zuul  API Gateway,                                      Hystrix  服务熔断管理, Fegin 服务调用请求封装  Redis缓存


Sonar相关:

1. 官方网址: https://www.sonarqube.org/

2. sonarqube与Docker使用的参考文档: https://hub.docker.com/_/sonarqube/

3. sonarqube的Git 链接。https://github.com/SonarSource/docker-sonarqube/blob/master/recipes.md

4. sonarqube说明

Coverage
红色:表示没有被覆盖
橙色:表示部分被覆盖
绿色:表示完全覆盖

Issues
每个issue有五个等级:

  1. BLOCKER:会影响应用程序的缺陷:内存泄漏,未关闭的JDBC连接…必须立刻修复的代码;
  2. CRITICAL :可能会影响应用程序的缺陷或者是安全性缺陷:空的catch块,sql注入,…必须立刻查看代码;
  3. MAJOR:可能会影响开发者效率的质量缺陷:未覆盖的代码,重复块,未使用的参数….
  4. MINOR:可能会影响开发者效率的质量缺陷:每行不能太长,“switch”语句应该至少有三个条件,….
  5. INFO:既不是缺陷也不是质量问题,只是一个发现。

Sonar结合项目使用:

1. 拉取Docker镜像:

docker pull bys-cd.chinacloudapp.cn/library/sonarqube:7.1

docker images 查看是否成功拉取。

2. 启动镜像:

docker run -d --name sonarqube 
-p 9000:9000 -p 9092:9092 
-e SONARQUBE_JDBC_USERNAME=$username 
-e SONARQUBE_JDBC_PASSWORD=$pwd 
-e SONARQUBE_JDBC_URL=‘jdbc:mysql://192.168.7.228/sonar?useUnicode=true&characterEncoding=utf8’ 
-v /home/beyondsoft/sonarqube/data:/opt/sonarqube/data 
-v /home/beyondsoft/sonarqube/extensions:/opt/sonarqube/extensions 
-v /home/beyondsoft/sonarqube/lib/bundled-plugins:/opt/sonarqube/lib/bundled-plugins 
bys-cd.chinacloudapp.cn/library/sonarqube:7.1

docker ps 查看

3. Maven相关:

在工程的根节点Pom.xml中添加配置:


<properties>
    <!-- Sonar & Jacoco related -->
    <jacoco.version>0.8.1</jacoco.version>
    <sonar.jacoco.reportPaths>${project.basedir}/../target/jacoco.exec</sonar.jacoco.reportPaths>
    <sonar.jacoco.itReportPath>${project.basedir}/../target/jacoco-it.exec</sonar.jacoco.itReportPath>
    <sonar.language>java</sonar.language>
    <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
    <sonar.inclusions>
        **/fnb/service/**/*
    </sonar.inclusions>
    <!--<sonar.coverage.exclusions>
        **/controller/**/*,
        **/model/**/*,
        **/utils/**/*,
        **/mapper/**/*,
        **/aop/**/*,
        **/config/**/*,
        **/exception/**/*,
    </sonar.coverage.exclusions>-->
</properties>


<!-- Sonar & Jacoco related build plugin  项目插件引用-->
<build>
   <plugins>
       <plugin>
           <groupId>org.jacoco</groupId>
           <artifactId>jacoco-maven-plugin</artifactId>
           <version>${jacoco.version}</version>
           <executions>
               <execution>
                   <id>agent-for-ut</id>
                   <goals>
                       <goal>prepare-agent</goal>
                   </goals>
                   <configuration>
                       <append>true</append>
                       <destFile>${sonar.jacoco.reportPaths}</destFile>
                   </configuration>
               </execution>
               <execution>
                   <id>agent-for-it</id>
                   <phase>package</phase>
                   <goals>
                       <goal>prepare-agent-integration</goal>
                   </goals>
                   <configuration>
                       <append>true</append>
                       <destFile>${sonar.jacoco.itReportPath}</destFile>
                   </configuration>
               </execution>
           </executions>
       </plugin>
   </plugins>
</build>
<!--  以上是项目插件引用-->

4. 运行命令集成:

注意:如果sonar服务运行在其他主机,需要在mvn命令中指定主机的ip地址等信息
mvn clean test sonar:sonar -Dspring.profiles.active=junit

5. 登录查看结果: http://localhost:9000

5.1 点击项目分析: 如下图示

image.png

5.2 点击需要查看的项目: 比如 msa

image.png

5.3 进入项目后会看到如下图示:

image.png

5.4 点击看到的选项: 比如bug 或者 Duplications

image.png


6. 期间遇见的问题


6.1 链接自己的mysql数据库(数据库自己都要先创建sonar模式)

官方参考链接如下。
image.png

自己最后成功的启动配置命令如下:
docker run -d --name sonarqube 
-p 9000:9000 -p 9092:9092 
-e SONARQUBE_JDBC_USERNAME=$username 
-e SONARQUBE_JDBC_PASSWORD=$pwd 
-e SONARQUBE_JDBC_URL=‘jdbc:mysql://192.168.7.228/sonar?useUnicode=true&characterEncoding=utf8’ 
bys-cd.chinacloudapp.cn/library/sonarqube:7.1

注意: 1. JDBC传参数要单引号起来。否则后台日志出现错:参数不是多参的格式。

        2. 参数必须带useUnicode=true&characterEncoding=utf8,否则也会报错提示你。这个都是要自己启动后去主动看后台启动日志的。

6.2 链接自己的mysql数据库启动报错

       [INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1168:sonar (default-cli) on project msa: No quality profiles have been found, you probably don't have any language plugin installed. -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.

这是数据库数据不对,启动镜像必须前后一致,比如使用默认latest版本链接测试的本地mysql,成功之后使用自己目前的7.1镜像,必须清除mysql数据库数据。再删除以前docker里面的容器,重新启动镜像。数据会重新导入数据库。再次启动mvn test sonar:sonar等。


6.3 挂载sonar数据文件出现问题。

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.1.1168:sonar (default-cli) on project msa: Unable to load component class org.sonar.scanner.bootstrap.ScannerPluginInstaller: Unable to load component class org.sonar.home.cache.FileCache: Unable to load component class org.sonar.scanner.bootstrap.GlobalConfiguration: Error 500 on http://localhost:9000/api/settings/values.protobuf : {"errors":[{"msg":"An error has occurred. Please contact your administrator"}]} -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.

这是外部映射的挂载文件是空,需要把没有挂载之前容器里面的启动成功的数据先copy一份。


title title
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值