zoukankan      html  css  js  c++  java
  • jenkins + sonar代码质量自动化分析平台

    1.Sonar介绍

    Sonar 是一个用于管理代码质量的开源工具,可以分析代码中的bug和漏洞以及Code Smells,支持20多种编程语言的检测,如java,c/c++,python,php等语言,当前有超过85000家组织在使用sonar。So
    nar可以与DevOps工具链完全整合,可以与大多数构建工具进行内置集成,与Jenkins,TFS / VSTS,TeamCity,Bamboo等持续整合引擎轻松集成,支持众多源代码管理配置工具,如git,svn,cvs等。 官方地址(需要代理上网查看):https://www.sonarqube.org/ 早在2007年,当创建第一行代码时,Sonar的创始人就梦想有一天能够为每个开发人员提供测量其项目代码质量的能力。他的座右铭:“持续检测必须成为持续整合的主流”。本文的目的就是安装一个sonar,并集成
    到Jenkins中,实现代码的一个持续质量监测。

    2.Sonar安装

    2.1 安装SonarQube --- 环境介绍

    注意:sonar服务器至少需要2G的内存才能有效运行,而操作系统则需要1GB的可用内存。
    
    Centos 7.4
    安装JDK 1.8
    安装Jenkins 2.222.1
    安装 maven 3.5.2(非必需,用于编译一些插件)
    安装mysql 5.7 数据库 (要求版本,不低于5.6安装完mysql后创建sonar数据库和账号,方式如下:
    # create database sonar character set utf8 collate utf8_general_ci; 
    # grant all privileges on sonar.* to 'sonar'@'localhost' identified by '123456'  with grant option;
    # grant all privileges on sonar.* to 'sonar'@'%' identified by '123456'  with grant option; # flush privileges;

    2.2 安装SonarQube --- 下载安装包

    cd /scripts/shell/sonar/
    #需要代理上网下载
    #wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.4.zip
    mkdir -p /home/wx/sonar/
    unzip sonarqube-7.4.zip -d /home/wx/sonar/

    2.3 安装SonarQube --- 配置启动脚本

    [root@jenkins ~]# cat /etc/init.d/sonar
    #!/bin/sh
    #
    # rc file for SonarQube
    #
    # chkconfig: 345 96 10
    # description: SonarQube system (www.sonarsource.org)
    #
    ### BEGIN INIT INFO
    # Provides: sonar
    # Required-Start: $network
    # Required-Stop: $network
    # Default-Start: 3 4 5
    # Default-Stop: 0 1 2 6
    # Short-Description: SonarQube system (www.sonarsource.org)
    # Description: SonarQube system (www.sonarsource.org)
    ### END INIT INFO
    /usr/bin/sonar $*

    2.4 安装SonarQube --- 授权启动焦恩执行权限并配置路径

    chmod +x /etc/init.d/sonar
    ln -s /home/wx/sonar/sonarqube-7.4/bin/linux-x86-64/sonar.sh  /usr/bin/sonar
    chkconfig sonar on

    2.5 安装SonarQube --- 修改配置文件

    [root@jenkins ~]# mkdir -p /home/wx/sonar/{temp,data}
    [root@jenkins ~]# chown -R wx.wx  /home/wx/sonar
    [root@jenkins ~]# cd /home/wx/sonar/sonarqube-7.4/conf/
    [root@jenkins conf]# cp sonar.properties{,.bak}
    sonar.jdbc.username=sonar
    sonar.jdbc.password=123456
    sonar.jdbc.url=jdbc:mysql://192.168.56.27:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    #下面一行内容需要手动添加,是为了优化web server,激活服务器模式,提升和保障性能的
    sonar.web.javaOpts=-server   
    ##下面这两行是配置elasticsearch的存储目录,默认是在sonar安装目录下会创建一个data和temp目录,但是官方并不推荐使用默认配置,为了更好的I/O性能以及以后的版本升级,推荐将这两个目录另外配置到专门的数据目录下
    sonar.path.data=/home/wx/sonar/data
    sonar.path.temp=/home/wx/sonar/temp
    #sonarqube访问端口
    sonar.web.port=9000
    #设置编码格式为UTF-8
    sonar.sorceEncoding=UTF-8  

    2.6 安装SonarQube --- 配置elasticsearch需要的环境

    因为SonarQube服务里面包含有elasticsearch服务,所以这两个文件是要修改的。翻了好多网友的博客都没有提到这一步,但是官网是有明确要求的:
    # echo -e "* soft nofile 65536
    * hard nofile 131072
    * soft nproc 2048
    * hard nproc 4096
    " >>/etc/security/limits.conf
    # echo "vm.max_map_count=655360" >>/etc/sysctl.conf
    # sysctl -p

    3. 安装sonar-scanner扫描器(sonarqube通过扫描器扫描代码)【本篇使用此扫描器】

    3.1 安装sonar-scanner扫描器 --- 下载安装包

    cd /scripts/shell/sonar/
    wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-2.8.zip
    unzip sonar-scanner-2.8.zip -d /home/wx/sonar/
    ln -s /home/wx/sonar/sonar-scanner-2.8/bin/sonar-scanner /usr/bin/sonar-scanner

    3.2 安装sonar-scanner扫描器 --- 修改配置文件

    [root@jenkins ~]# cd /home/wx/sonar/sonar-scanner-2.8/conf/
    [root@jenkins conf]# cp sonar-scanner.properties{,.bak}
    [root@jenkins conf]# vim sonar-scanner.properties
    sonar.jdbc.username=sonar
    sonar.jdbc.password=123456
    sonar.jdbc.url=jdbc:mysql://192.168.56.27:3306/sonar?useUnicode=true&characterEncoding=utf8

    4.安装sonarQube runner扫描器(sonarqube通过扫描器扫描代码)【本篇未使用此扫描器】

    4.1 安装sonarQube runner扫描器 --- 下载安装包

    cd /scripts/shell/sonar
    wget http://repo1.maven.org/maven2/org/codehaus/sonar/runner/sonar-runner-dist/2.4/sonar-runner-dist-2.4.zip
    unzip sonar-runner-dist-2.4.zip -d /home/wx/sonar/
    ln -s /home/wx/sonar/sonar-runner-2.4/bin/sonar-runner /usr/bin/sonar-runner

    4.2 安装sonarQube runner扫描器 --- 修改配置文件

    [root@jenkins ~]# cd /home/wx/sonar/sonar-runner-2.4/conf/
    [root@jenkins conf]# cp sonar-runner.properties{,.bak}
    [root@jenkins conf]# vim sonar-runner.properties
    sonar.jdbc.url=jdbc:mysql://192.168.56.27:3306/sonar?useUnicode=true&characterEncoding=utf8
    sonar.jdbc.username=sonar
    sonar.jdbc.password=123456

    4.3 安装sonarQube runner扫描器 --- 添加环境变量

    [root@jenkins ~]# vim /etc/profile.d/sonar.sh
    export SONAR_HOME=/home/wx/sonar/sonarqube-7.4
    export SONAR_RUNNER_HOME=/home/wx/sonar/sonar-runner-2.4
    export PATH=$SONAR_RUNNER_HOME/bin:$PATH
    [root@jenkins ~]# source /etc/profile.d/sonar.sh

    5.启动sonarQube

    注意:sonar默认不允许使用root用户启动,所以我们需要创建普通用户,并以普通用户启动
    [root@jenkins ~]# useradd wx
    [root@jenkins ~]# chown -R wx:wx /home/wx/sonar/
    [root@jenkins ~]# su - wx
    [sonar@c7-node1 root]$ /etc/init.d/sonar start

    6.启动报错 - 解决办法

    一、
    #  报错(sonar.log文件)
    Web server startup failed: Current version is too old. Please upgrade to Long Term Support version firstly.
    
    #  解决办法
    清理历史数据(因首次安装,直接drop掉sonar库,然后重建),然后重启sonar即可
    二、
    #  报错(sonar.log文件)
    2020.07.27 10:05:30 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /home/wx/sonar/temp
    
    #  解决办法
    rm -rf /home/wx/sonar/temp

    7.启动sonarQube样式

    sonar启动成功后,访问服务器的9000端口即可打开sonar的web界面,默认账号和密码为admin:admin注意:sonar默认不允许使用root用户启动,所以我们需要创建wx用户,并以wx用户启动。
    出现如下页面说明sonar安装成功,如果sonar安装失败,则根据日志报错内容进行排查即可。

    8.Sonar 插件使用及汉化

    8.1 后台安装中文插件【不推荐使用】

    Sonar可以通过安装插件的方式来扩展自己的功能,具体信息可以访问sonar的插件库,里面提供了众多代码分析插件,认证授权插件,外部分析插件,语言插件,可视化/报告插件等。下面我们就通过安装
    sonar等中文插件来演示sonar插件的安装。
    sonar的插件库:https://docs.sonarqube.org/display/PLUG/Plugin+Library
    登陆sonar后,在Administration–>System–>Update Center–>Available中搜索Chinese就可以看到中文插件包,点击install即可安装。但是安装时间非常慢,甚至还会失败,建议还是手动安装

    8.2 手动安装插件【推荐】

    中文插件github地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases
    我们把中文插件jar包下载到我们本地,并且切换到相应的版本(我安装的sonar7.4版本,对应的汉化包版本是1.24
    ###需要翻墙下载 # wget https:
    //github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.24/sonar-l10n-zh-plugin-1.24.jar # cp sonar-l10n-zh-plugin-1.24.jar /home/wx/sonar/sonarqube-7.4/extensions/plugins/ 复制中文插件到sonar插件目录后,重启sonar生效重启sonar后,访问web验证效果,可以看到汉化成功了

    9.jenkins调试

    9.1 jenkin安装sonarQube客户端插件

    9.2 Linux服务器添加sonar-scanner环境变量

    [root@jenkins ~]# vim /etc/profile
    #。。。。。。(省略)
    export SONAR_SCANNER_HOME=/home/wx/sonar/sonar-scanner-2.8
    export PATH=${SONAR_SCANNER_HOME}/bin:${PATH}

    9.3 Linux服务器添加java环境变量

    [root@jenkins ~]# vim /etc/profile
    #。。。。。。(省略)
    export JAVA_HOME=/home/wx/jdk
    export JAVA_BIN=/home/wx/jdk/bin
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME JAVA_BIN PATH CLASSPATH

    9.4 配置jenkins web端sonar-scanner环境变量

    9.5 配置jenkins web端java环境变量

    9.6 配置jenkins  web端系统配置SonarQube servers信息

    10.测试sonarqube + sonarqube scanner扫描分析前端/python/php代码

    10.1Sonarqube客户端创建分析前端/php/python项目

    10.2 Jenkins添加前端构建项目 --- jenkins web配置

    10.3 Jenkins添加前端构建项目 --- 参数说明

    sonar.projectKey=$deploymentEnv\_$serviceName
    sonar.sources=./
    sonar.login=f76c531d9f6d0ca616c626bdf620f94fc77c483f
    sonar.sourceEncoding=UTF-8
    
    注释:
    #key,唯一标识(随意输入,必填项【为方便在sonar web端查看直接用项目名即可】)
    sonar.projectKey=项目名
    #项目名称和版本(必填项)
    sonar.projectName=项目名
    #要扫描的代码路径,项目的相对路径
    sonar.sources=./
    sonar.login=f76c531d9f6d0ca616c626bdf620f94fc77c483f
    sonar.sourceEncoding=UTF-8

    11.测试sonarqube + sonarqube scanner扫描分析后端java代码

    11.1 Sonarqube客户端创建分析后端java项目

    11.2 Jenkins+sonar-scanner分析java报错 - 解决办法

    #  报错内容
    

    # 解决办法
    jenkins构建中添加classes目录位置参数
    sonar.java.binaries=./es-provider/es-provider-quartz/build/classes

    11.3 Jenkins添加后端构建项目

    #  Jenkins web配置
    
    
    
    #  参数说明
    sonar.projectKey=alpha_es-provider-quartz
    sonar.sources=./es-provider/es-provider-quartz/src/
    sonar.java.binaries=./es-provider/es-provider-quartz/build/classes
    sonar.login=9c6ada8f5853438d16874c0c52d44339a5043c38
    sonar.sourceEncoding=UTF-8
    注释:
    #key,唯一标识(随意输入,必填项【为方便在sonar web端查看直接用项目名即可】)
    sonar.projectKey=项目名
    #项目名称和版本(非必填项)
    sonar.projectName=项目名
    #要扫描的代码路径,项目的相对路径
    sonar.sources=./es-provider/es-provider-quartz/src/
    sonar.java.binaries=./es-provider/es-provider-quartz/build/classes
    sonar.login=f76c531d9f6d0ca616c626bdf620f94fc77c483f
    sonar.sourceEncoding=UTF-8

      ####

  • 相关阅读:
    27:单词翻转
    c++自制锁机程序--两行代码
    19:字符串移位包含问题
    18:验证子串
    23:二维数组回形遍历
    Java获取程序或项目路径的常用方法
    java 、Android 提交参数转码问题
    java 上传图片 打水印
    使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
    zoj 1010 Area【线段相交问题】
  • 原文地址:https://www.cnblogs.com/faithH/p/13707089.html
Copyright © 2011-2022 走看看