• Sonarqube 安装 及与Jenkins sonar scanner插件集成部署


    一、 SonarQube基本概述

    1.什么是SonarQube

    SonarQube是一个开源的代码质量管理系统,用于检测代码中的错误,漏洞和代码规范。它可以现有的Gitlab、Jenkins集成,以便在项目拉取后进行连续的代码检查。
    在这里插入图片描述

    2.使用SonarQube前提

    • SonarQube基于Java开发,所以需要安装 OpenJDK8 版本。
    • SonarQube需要依赖 MySQL 数据库,至少 5.6 版本以上8版本以下。
    • SonarQube的小型实例至少需要4GB 内存,如果是大型实例需要 16GB

    二、SonarQube服务安装

    分两个步骤,第一步安装sonarqube server端,第二步,jenkins集成sonarqube-scanner(需要连接sonar服务端)

    这里SonarQube使用的是7.4版本,mysql版本 mysql>=5.6 && mysql <8.0

    1.安装数据库

    数据库安装

    启动数据库,为sonarqube创建一个专有用户,最后创建一个sonar

    create database sonar default character set utf8;
    GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'xxx' IDENTIFIED BY 'xxx' WITH GRANT OPTION;
    
    • 1
    • 2

    2.安装sonarqube

    2.1 官网下载 sonarqube

    注意:新版的SonarQube(7.9+)只支持以下数据库:
    Microsoft SQL Server、Oracle、PostgreSQL、H2 (默认的嵌入式数据库)
    不再支持MySQL,请更换数据库。

    这里下载的是7.4版本

    #解压
    wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.4.zip
    unzip sonarqube-7.4.zip -d /usr/local/
    
    • 1
    • 2
    • 3

    因为sonarqube不能以root启动,此处需要创建一个普通用户,此处我创建的为sonar

    useradd sonar
    
    • 1

    2.2 更改下sonarqube目录所有权

    ln -s /usr/local/sonarqube-7.4 /usr/local/sonarqube
    chown -R sonar:sonar /usr/local/sonarqube
    chown -R sonar:sonar /usr/local/sonarqube-7.4/
    
    • 1
    • 2
    • 3

    2.3 修改sonarqube连接数据库配置文件

    sonar.jdbc.url=jdbc:mysql://xxx:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    sonar.jdbc.username=sonar
    sonar.jdbc.password=xxx
    sonar.sorceEncoding=UTF-8
    sonar.login=admin
    sonar.password=admin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.4 启动sonarqube服务

    su sonar  -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"
    
    • 1

    2.5 汉化包地址

    汉化地址
    汉化包版本选择对应版本,此处1.24版本汉化包对应7.4版本sonarqube
    把汉化包放在解压地址下/usr/local/sonarqube/extensions/plugins

    2.6 访问Sonarqube

    1.通过浏览器输入 http://xxx:9000地址来访问sonarqube

    点击登录–>输入用户名:admin 用户密码:admin

    在这里插入图片描述
    在这里插入图片描述

    2.如何使用 SonarQube 质量分析;java 代码直接通过mvn即可分析
    mvn sonar:sonar \
      -Dsonar.host.url=http://xxx:9000 \
      -Dsonar.login=xxx
    
    • 1
    • 2
    • 3
    3.如何使用SonarQube质量分析;非 java 代码则需要使用 sonar-scanner工具分析;

    在这里插入图片描述

    sonar-scanner \
      -Dsonar.projectKey=html \
      -Dsonar.sources=. \
      -Dsonar.host.url=http://xxx:9000 \
      -Dsonar.login=xxxx
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.Sonarqube插件管理

    Sonarqube默认已经安装了 C Java Python Php 等代码的质量分析工具;那我们为什么还需要安装插件?因为我们还需要检测 html等类型代码,而默认插件没有,所以需要安装;以便将代码检测的更加完善;

    3.1 联网安装插件

    联网安装插件比较简单,仅需要上应用市场搜索插件名称即可,如下以安装中文语言包插件为例;点击配置> 应用市场--> 搜索框chinese,出现一个Chinese Pack,然后点击install安装好的插件会存储至/usr/local/sonarqube/extensions/plugins/xx.jar
    在这里插入图片描述

    3.2 离线安装插件

    由于 SonarQube 需要安装很多的插件,并且插件安装需要很长的时间;所以我们可以通过导入的方式来完成插件的安装;注意导入后需要重启 Sonarqube

    rm -rf /usr/local/sonarqube/extensions/plugins/
    tar xf sonar_plugins.tar.gz -C /usr/local/sonarqube/extensions
     chown -R sonar.sonar /usr/local/sonarqube/extensions/plugins/
    su sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"
    
    • 1
    • 2
    • 3
    • 4

    三、SonarQube代码检测

    前面已经将 SonarQube服务以及插件安装完成,那么接下来只需要将代码推送至 Sonarqube 进行分析即可。

    1.Java项目分析

    1.1 Java项目可以通过maven进行代码质检,无需使用sonar-scanner 工具,安装maven工具即可。

    yum -y install maven 
    
    • 1

    1.2 手动从svn仓库获取java 代码,进入项目目录,使用mvn进行代码扫描

    mvn sonar:sonar \
      -Dsonar.host.url=http://xxx:9000 \
      -Dsonar.login=xxx
    
    • 1
    • 2
    • 3

    2 HTML项目分析

    Sonarqube 分析 Html、php、go 项目;需要借助sonar-scanner客户端工具来完成代码的分析;
    需要在项目所在的主机安装sonar-scanner

    2.1 安装 sonar-scanner 命令

    sonar-scanner下载地址

    2.2 用sonar-scanner进行分析

    进入项目目录,使用sonar-scanner工具将代码推送Sonarqube 服务端进行分析;如果没有加入环境变量,则建议使用绝对路径

    /usr/local/sonar-scanner/bin/sonar-scanner \
      -Dsonar.projectKey=html \
      -Dsonar.sources=. \
      -Dsonar.host.url=http://xxx:9000 \
      -Dsonar.login=xxx
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3 登陆 Sonarqube 查看项目分析结果

    在这里插入图片描述

    四、Jenkins集成SonarQube

    Jenkins 需要知道 Sonarqube 服务;以便能将代码推送指定服务节点;
    Jenkins 需要知道 Sonar-Scanner 客户端工具,以便能正常调用

    4.1 集成Sonarqube

    1.插件安装;Manage Jenkins–>Manage Plugins–>SonarQube Scanner
    在这里插入图片描述
    2.在 Jenkins 上配置 SonarQube 服务端地址;Manage Jenkins–>Configure System–>sonarQube (告诉jenkins SonarQubeServers服务端地址)
    Name 可以随意填写
    URL 添加 SonarQube服务端地址;确保Jenkins能正常访问;
    下面的凭据需要先保存URl的地址信息,在打开进行添加凭据。
    在这里插入图片描述
    这里Secret为Sonarqube生成的令牌
    在这里插入图片描述
    进行添加token
    在这里插入图片描述
    以上SonarQube信息就添加完成了

    4.2 集成Sonar-Scanner

    在 Jenkins 上配置 Sonar-Scanner 客户端工具路径; Manage Jenkins–>Global Tool Configuration–>sonar-scanner(告诉jenkins SonarScanner在本地哪个路径)
    1.Name 可以随意填写,但最好有规范
    2.SONAR_RUNNER_HOME 填写 sonar-scanner 在Jenkins本地路径
    在这里插入图片描述

    4.3 Jenkins为项目添加代码检测

    java项目 Scanner质检方式,把执行代码质检拉倒执行shell的前面

    sonar.projectName=${JOB_NAME} #项目在sonarqube上的显示名称
    sonar.projectKey=java ##项目的唯一标识,不能重复
    sonar.scm.provider=svn
    sonar.projectVersion=1.0
    sonar.projectBaseDir=xxx #项目所在的目录(使用绝对路径)
    sonar.sources=xxx  #扫描哪个项目的源码(使用绝对路径)
    sonar.java.binaries=xxx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    这样配置后,每次项目CI时候,先会进行质量检测,并将结果传送至SonarQube服务器。

    五、Jenkins为项目添加通知阶段

    5.1 配置钉钉

    1.打开钉钉群组,点击设置–智能群助手–群机器人–添加机人–自定义机器人。(如果你不是群主,且群主开启了仅群主可管理,那么将无法创建机器人。)
    2.添加一个自定义机器人
    3.可以修改机器人名称,以及机器人的名字。(这块自行修改)
    4.机器人修改成功后,会给出一个webhook地址。(此处的webhook后续jenkins需要使用)
    在这里插入图片描述
    在这里插入图片描述

    5.2 Jenkins集成钉钉

    1.Jenkins安装dingding插件。
    在这里插入图片描述
    配置dingding通知token
    在这里插入图片描述
    2.配置钉钉机器人
    在这里插入图片描述

    5.3 项目添加通知

    5.3.1 CI阶段通知质检结果

    质检通知相对繁琐,需要自定义环境变量
    1.启用钉钉机器人

    - 构建的项目:${JOB_NAME}
    - Sonar质检报告:http://xxx
    
    • 1
    • 2

    在这里插入图片描述

    5.3.2 钉钉通知结果验证

    在这里插入图片描述

  • 相关阅读:
    PhpStorm 2023年下载、安装教程和好用插件,保姆级教程
    如何传输文件流给前端
    Centos7安装Clickhouse单节点部署
    MFC application : let‘s learn from the start
    1024 蓝屏漏洞攻防战(第十九课)
    Flink-JDBC SQL Connector报错: java.lang.Integer cannot be cast to java.lang.Long
    kafka rabbitmq 详细对比
    Vue3 Setup语法糖汇总
    Linux 线程:线程同步、生产者消费者模型
    【python】python的单例设计模式
  • 原文地址:https://blog.csdn.net/chj_1224365967/article/details/127618078