• Jenkins 集成 Sonar


    Jenkins 与 Sonar 集成:Sonar 是 Jenkins 之外独立运行的一个服务。Jenkins 中安装插件 SonarQube(并配置其 Sonar Server 的 URL / AccessToken 等信息),构建完毕后,该插件把报告数据提交给 Sonar Server 解析,Sonar Server 最终以量化图形方式展示代码质量变化。

    1 Sonar 服务器的安装

    1.1 系统需求

    • JDK1.8
    • 内存 2GB+
    • MySQL 5.7

    1.2 安装 MySQL Server

    安装mysql:不介绍

    准备 sonar 数据库(sonar)和用户(sonar/Sonar6.2):

    1
    2
    3
    4
    5
    ## mysql -A -uroot -pMySQL5.7
    MySQL> CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'Sonar6.2';
    MySQL> CREATE DATABASE sonar CHARACTER SET UTF8;
    MySQL> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost';
    ## mysql -A -usonar -pSonar6.2 -Dsonar -e "SHOW CREATE DATABASE sonar"

    1.3 下载 SonarQube(V6.2)

    1
    2
    3
    4
    5
    ## https://www.sonarqube.org/downloads/
    ## wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-6.2.zip ## 下载失败
    wget https://fossies.org/linux/misc/sonarqube-6.2.zip ## 125M, MD5=f13464a4a4c32f5fa4b075f2247f3d67
    sudo unzip -q sonarqube-6.2.zip -d /opt/
    sudo ls -l /opt/sonarqube-6.2/

    1.4 修改 SonarQube 配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ## sudo vim /opt/sonarqube-6.2/conf/sonar.properties
    sonar.web.javaOpts=-server -Xms256m -Xmx768m -XX:+HeapDumpOnOutOfMemoryError
    sonar.jdbc.username=sonar
    sonar.jdbc.password=Sonar6.2
    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
     
    ## 下面设定访问网址为 http://10.21.0.187:9000/sonar
    sonar.web.host=0.0.0.0
    sonar.web.port=9000
    sonar.web.context=/sonar

    1.5 启动服务

    1
    2
    3
    4
    5
    sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh stop ## 停止服务
    sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh start ## 启动服务
    sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh restart ## 重启服务
    sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh console ## 控制台启动
    sudo tail -f /opt/sonarqube-6.2/logs/sonar.log ## 查看日志

    1.6 防火墙放行

    1
    2
    3
    ### sudo vim /etc/sysconfig/iptables
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 9000 -j ACCEPT
    ### 重启生效: sudo systemctl restart iptables

    1.7 安装插件 SonarQube

    浏览器访问 http://10.21.0.187:9000/sonar,用预设的管理员账号(admin/admin)登陆;
    在线安装:进入插件中心 (Administration / System / Update Center / Available Plugins) 找到所需的插件,点击右侧的 “Install” 开始安装;


    jenkins sonar-plugins
    离线安装:在线安装容易失败,可尝试离线安装,下载插件 jar 文件至插件目录下,并重启 SonarQube 生效;
    插件 jar 文件的下载地址,可以到在线安装页找到插件的 Homepage 再找 releases,如下:

    • Git: 已自带安装;
    • SVN: 已自带安装;
    • Java: 已自带安装,Java 源代码解析,计算指标等;
    • JavaScript: 已自带安装;
    • Chinese Pack:SonarQube 页面汉化;
    • Findbugs
    • Checkstyle
    • PMD
    • SonarGraph

    插件的离线安装脚本如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    cd /opt/sonarqube-6.2/extensions/plugins/
    sudo rm -rf sonar-csharp-plugin-*.jar
    sudo wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.13/sonar-l10n-zh-plugin-1.13.jar
    sudo wget https://github.com/SonarQubeCommunity/sonar-findbugs/releases/download/3.4.4/sonar-findbugs-plugin-3.4.4.jar
    sudo wget https://github.com/SonarQubeCommunity/sonar-checkstyle/releases/download/2.4/sonar-checkstyle-plugin-2.4.jar
    sudo wget https://github.com/SonarQubeCommunity/sonar-pmd/releases/download/2.6/sonar-pmd-plugin-2.6.jar
    sudo wget https://github.com/SonarQubeCommunity/sonar-sonargraph/releases/download/sonar-sonargraph-plugin-3.5/sonar-sonargraph-plugin-3.5.jar
    sudo /opt/sonarqube-6.2/bin/linux-x86-64/sonar.sh restart ## 重启服务
    ## 注意:不完整的 wget 下载文件必须删掉,否则会导致 SonarQube 启动失败!

    1.8 生成认证令牌(Token)

    外部系统(比如 Jenkins)访问 SonarQube 时要用到;
    进入:Administration(配置) / Security(权限) / User(用户),找到用户 admin,点击 “Tokens” 一列;
    弹出界面里:输入 TokenName=”admin”, 点击 “Generate”, 生成 “8687b74188c446f2e02ec6eb5ee9d80b88048406”

    1.9 部署至 Tomcat

    上面是 Sonar 以独立 server 方式运行,也可以改为集成至 Tomcat:

    1
    2
    3
    ## 注意修改 $TOMCAT_HOME/bin/catalina.sh 初始内存 1G+
    sudo /opt/sonarqube-6.7/war/build-war.sh ## 将sonar达成一个war包
    sudo cp /opt/sonarqube-6.7/war/sonar.war %TOMCAT_BASE/web-apps/

    2 Jenkins 接入 Sonar

    2.1.1 Jenkins 插件的安装与设置

    安装完毕后,进入:系统管理 / 系统设置 / SonarQube servers, 点击 “Add SonarQube” 按钮:

    • Name: SonarQube-6.2
    • Server URL: http://10.21.0.187:9000/sonar
    • Server version: 5.3 or higher
    • Server authentication token: 8687b74188c446f2e02ec6eb5ee9d80b88048406(前面 SonarQube 生成的)
      Jenkins 会把构建结果通过 URL和认证令牌发送给 SonarQube
      sonar jenkins-config

    2.1.2 使用jenkins自带的插件安装

      需要安装的插件如下:

      ps:注意JDK环境的配置(jdk的路径)是bin的上级目录

    2.2 调整 Jenkins 构建设置

    构建设置 Build 中,指定 Maven goals: “sonar:sonar”
    项目构建时就会自动上报构建报告给 Sonar

    2.3 构建错误排查

    构建如有报错,可查看 SonarQube 日志来分析:

    1
    2
    3
    ## cat /opt/sonarqube-6.2/logs/web.log
    Caused by: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (6428688 > 4194304).
    You can change this value on the server by setting the 'max_allowed_packet' variable.

    含义是 MySQL Server 的参数值设置过小,调整并重启 mysqld:

    1
    2
    3
    4
    ## sudo vim /etc/my.cnf
    ## sudo systemctl restart mysqld
    [mysqld]
    max_allowed_packet=64M ## default 4M

    2.4 查看报告

    进入登陆 SonarQube 查看:
    http://10.21.0.187:9000/sonar
    下图展示的只是项目报告首页,每个链接进去能看到详情:

  • 相关阅读:
    HTML3 / 4 / 4.1 / 5 版本升级过程中,变化是怎么样的
    HTML head内所有标签,及其作用
    HTML 和 XHTML和区别
    HTML DOCTYPE 都有哪些,它们之前的区别和用途分别是什么?
    eclipse中英文切换--四种方式
    Eclipse Class Decompiler---Java反编译插件
    jdk历史版本下载
    eclipse优化(部分)
    博客迁移到github
    JavaScript:同步、异步和事件循环
  • 原文地址:https://www.cnblogs.com/dengshihuang/p/8066914.html
Copyright © 2020-2023  润新知