zoukankan      html  css  js  c++  java
  • 持续集成实践二之Jenkins与Sonar Qube集成

    前言

      作为一名码农,曾几何时,无数次挑灯夜战,只为第二天为客户稳定演示系统,奈何到关键时候,会发现代码中会有很多坑,这个时候,往往是最令人崩溃的。如何能做到提前发现程序潜在的问题,找到隐藏的八阿哥,保证系统的稳定,一直是困扰着我们的问题。记得以前为了解决这个问题,部门专门组织每周一次代码走查,虽然最后情况有所改善,但费事费力,并未得到根本上的解决。

      所幸的是,有些大牛开发出了一系列代码质量检测工具,给我们这些码农带来了福音。下面就来介绍一款开源的代码质量管理系统——SonarQube。相信通过下面简单的介绍,你会跟我一样有种相见恨晚的感觉。

    Sonar Qube简介

      SonarQube(曾用名Sonar(声纳))是一个开源的代码质量管理系统。它支持C/C++、JavaScript、C#、Java、COBOL、TypeScript、PL/SQL、PL/I、PHP、FLEX、Python、Swift、XML等超过20种编程语言的检测。Sonar可以通过插件Findbugs、Checkstyle等工具持续对代码进行检测,可以使我们尽早发现项目中的Bugs,漏洞及坏味道,从而保证软件产品质量。

    环境准备

    Sonar 安装

    1. SonarQube下载。首先,到Sonar官网https://www.sonarqube.org/downloads/)下载安装包,目前最新版本为SonarQube 6.7 (LTS *)。将SonarQube解压到本地任意目录。

    2. 配置Sonar数据库。Sonar默认使用的是H2的内嵌数据库,内嵌数据库只能用户测试场景,本例中使用mysql数据库,具体配置方法如下:

      在mysql中创建sonar数据库,以用户名root,密码admin为例。打开...sonarqube-6.6conf文件夹,找到sonar.properties文件,修改以下几个地方:

      配置数据库用户名及密码:

    #sonar.properties
    
    sonar.jdbc.username=root
    sonar.jdbc.password=admin
    

      设置数据库库连接:

     #sonar.properties
     
     sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
     sonar.jdbc.driverClassName:com.mysql.jdbc.Driver
     sonar.jdbc.validationQuery:select 1
    

      设置连接池:

    #sonar.properties
    
     sonar.jdbc.maxActive:                      			20
     sonar.jdbc.maxIdle:                        			5
     sonar.jdbc.minIdle:                        			2
     sonar.jdbc.maxWait:                        			5000
     sonar.jdbc.minEvictableIdleTimeMillis:     	600000
     sonar.jdbc.timeBetweenEvictionRunsMillis:  30000
    
    1. 启动Sonar。

      启动Sonar有两种方式:一种,直接执行...sonarqube-6.6inwindows-x86-64StartSonar.bat;另一种,将Sonar安装为Windows服务,注意一定要以管理员身份运行...sonarqube-6.6inwindows-x86-64InstallNTService.bat,安装成功以后,运行...sonarqube-6.6inwindows-x86-64StartNTService.bat启动Sonar。Sonar启动以后,在浏览器中输入地址http://localhost:9000访问Sonar主页。

    启动界面

    1. Sonar汉化。

      下载Sonar汉化插件,链接:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/tag/sonar-l10n-zh-plugin-1.18,将汉化插件拷贝到...sonarqube-6.6extensionsplugins文件夹,重启Sonar。Sonar重启以后,在浏览器中输入地址http://localhost:9000访问Sonar主页。

    汉化后界面

    1. Sonar插件安装。
    • 安装 SonarJava 插件Java代码分析器;

    • 安装SonarJS插件,JavaScript代码分析器;

    • 安装SonarXML插件,XML分析器;

    • 安装Web插件,HTML, JSP, JSF, ..代码分析器;

    • 安装CSS / SCSS / Less插件,CSS、Less代码分析器;

    • 安装SonarC# 插件,C#代码分析器;

    • 安装SonarQube :: Plugins :: SCM :: SVN插件;

    • 安装Checkstyle插件,Provide Checkstyle rules for Java projects;

    • 安装Findugs 插件,Provide Findbugs rules for analysis of Java projects。

    1. 配置SCM权限。

      配置SCM权限

    Scanner安装

    1. 下载SonarQube Scanner 3.0.3安装包(链接:https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner)。将SonarQube Scanner 3.0.3安装包解压到任意目录。

    2. 配置SonarQube Scanner。打开...sonar-scanner-3.0.3.778-windowsconf文件夹,找到sonar-scanner.properties并以文本编辑器打开,配置如下:

      # ----- Default SonarQube server
      sonar.host.url=http://localhost:9000
      
      # ----- Default source code encoding
      sonar.sourceEncoding=UTF-8
      

    Jenkins集成

    1. Jenkins安装。请参照上一篇文章,链接:https://my.oschina.net/lsjcoder/blog/1573648

    2. 安装SonarQube Scanner for Jenkins插件安装。系统管理->管理插件,找到SonarQube Scanner for Jenkins插件,安装完成后重启Jenkins。

      安装SonarQube Scanner

    3. 配置SonarQube Server。

      配置SonarQube Server

    4. 配置SonarQube Scanner。

      配置SonarQube Scanner

    5. 项目中增加SonarQube Scanner扫描配置。

      添加发布后步骤

      项目扫描配置

    6. 立即构建,查看控制台日志输出。

      分析结果

    分析结果

      点击上面的链接,即可打开SonarQube,查看项目分析结果。

    结果浏览

    总结

      在整合流程中,需要注意一下几点:

    1. mysql版本必须要安装5.6及以上版本,否则会导致Sonar因不兼容而无法正常运行;
    2. SonarQube未配置SCM权限,会导致报”SVNAuthenticationException“的错误;
    3. 注意一定要安装各种语言分析插件,否则会报”No quality profiles have been found, you probably don't have any language plugin installed“的错误;

      至此,Jenkins与Sonar Qube的初步集成工作已初步完成,下面就会针对自动检测出来的Bugs、漏洞及坏味道,进行逐一修复,还掉以前欠下来的技术债务。


    欢迎关注我的微信公众号:

  • 相关阅读:
    java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header.
    spring-session-data-redis依赖冲突问题
    centos7启动iptables时报Job for iptables.service failed because the control process exited with error cod
    图片上传后台服务报内存溢出 Out Of Memory Java heap space
    mysql 数据库密码忘记重置 进行远程连接
    打Jar包
    Type interface com.innovationV2.mapper.UserMapper is not known to the MapperRegistry
    关于java基础类型Integer String的clone()
    clion使用clang编译
    token & refresh token 机制总结
  • 原文地址:https://www.cnblogs.com/lsjcoder/p/7887265.html
Copyright © 2011-2022 走看看