sonar.md 9.3 KB

sonarqube 信息

  • host:http://121.204.249.37:9100
  • token:8c31d6b3a1b0680b07eb009d68398bc8495c74f9
  • 帐号:sonar-develop
  • 密码:Sonar@develop123

前提说明:

版本支持参考:8.9版本

  1. sonarqube对jdk有版本要求
    说明:最新版本sonarqube 10.8要求jdk17,如果项目使用jdk1.8,最高版本只能是sonarqube 8.9。
  2. sonarqube对数据库也有要求,高版本只支持postgreSQL,SqlServer,Oracle,同时对版本也有要求;
  3. maven的sonarscanner插件,新旧版本支持的属性也有些不同,比如:sonnar.login和password在新版本已过期,需要使用sonar.token等
    最新版本属性 8.9版本属性

1. docker安装

根据需要安装对应的版本,官方安装文档参考: 8.9版本 最新版本
docker-compose.yml配置文件如下:

   version: "3"
   services:
      sonarqube:
         image: sonarqube:8.9.10-community
         depends_on:
         - postgres
         environment:
           SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
           SONAR_JDBC_USERNAME: sonar
           SONAR_JDBC_PASSWORD: sonar
         volumes:  #注意:需要设置/data/module/sonarqube目录权限755
         - /data/module/sonarqube/data:/opt/sonarqube/data
         - /data/module/sonarqube/extensions:/opt/sonarqube/extensions
         - /data/module/sonarqube/logs:/opt/sonarqube/logs
         ports:
         - "9000:9000"
      postgres:
         image: postgres:15
         environment:
           POSTGRES_USER: sonar
           POSTGRES_PASSWORD: sonar
           POSTGRES_DB: sonar
         volumes:
         - /data/module/postgresql:/var/lib/postgresql
         - /data/module/postgresql/data:/var/lib/postgresql/data

2. sonarqube的插件安装

  • 插件安装也需要对照版本 8.9版本 最新版本
    • 离线安装plugins
      从版本对照找到适合的插件版本下载jar包,放入$SONAR_HOME/extensions/plugins目录即可, 推荐安装的插件有:
    • Chinese Pack
    • checkstyle
    • p3c-pmd【阿里代码规约,需要自己下载源码编译,github地址
  • 代码规则配置:在p3c-pmd的基础上,添加sonar默认的一些规则;
  • 质量阈自定义配置【否则都是成功】。

3. jenkins支持sonarqube

8.9版本 最新版本

  • 插件的方法使用说明和环境变量参考地址
  • 如果jenkins插件市场搜索到的SonarQube Scanner版本不对照,可以从该链接地址 下载 手动安装
  • 在SonarQube中(配置->网络调用)创建jenkins的webhook地址:
    http://[jenkins_url]/sonarqube-webhook/
  • jenkisfile写法参考:
node {
    stage('SonarQube analysis') {
      withSonarQubeEnv('My SonarQube Server') {
         sh 'mvn clean package sonar:sonar'
       } // submitted SonarQube taskId is automatically attached to the pipeline context
    }
   
   // No need to occupy a node
   stage("Quality Gate"){
      timeout(time: 1, unit: 'HOURS') { // Just in case something goes wrong, pipeline will be killed after a timeout
         def qg = waitForQualityGate() // Reuse taskId previously collected by withSonarQubeEnv
         if (qg.status != 'OK') {
           error "Pipeline aborted due to quality gate failure: ${qg.status}"
         }
      }
   }
   
   或者
   
   stage("Quality Gate") {
      steps {
         timeout(time: 1, unit: 'HOURS') {
            // Parameter indicates whether to set pipeline to UNSTABLE if Quality Gate fails
            // true = set pipeline to UNSTABLE, false = don't
            waitForQualityGate abortPipeline: true
         }
      }
   }
}

4. 【后端开发】idea添加sonar插件

  1. 插件市场名字:SonarQube for IDE, 别名:SonarLint
    插件官网地址
    配置了远程SonarQube的hostUrl和token以后可以使用。
    注意: 下载sonarLint的版本要与sonarQube服务端版本(版本号:8.9)匹配,否则使用不了。
  2. 插件的作用:
  3. 在代码开发过程中,检测到代码质量问题,
  4. git提交代码之前sonarLint会提示代码commit的代码有哪些问题。
    【目的】:做到提前修复,避免在jenkins部署时候出现一堆需要修改的代码耽误部署时间。

(1)该插件只能检测sonarqube默认的规则,不能检测阿里巴巴的基于pmd的p3c规则, 原因:https://blog.csdn.net/weixin_42617348/article/details/81170166;
(2)开发过程中,要通过maven的sonar插件规则校验。

5. 【后端开发】sonar-maven-plugin插件安装使用

maven配置参考官网 8.9版本 最新版本
项目模块使用方式:

  • pom.xml升级parent依赖,com.platomix:platomix-pom:1.2.2;
  • 执行命令mvn clean package sonar:sonar 或者 直接使用sonar-scanner软件扫描。

6. 【后端开发】maven-pmd-plugin插件安装使用

  1. 每个项目的根目录下放置ali-pmd.xml文件;
  2. pom.xml升级parent依赖,com.platomix:platomix-pom:1.2.4;
  3. 开发过程中,通过idea的Alibaba Java Code Guidelines插件扫描,然后通过clean package时,会通过maven-pmd-plugin插件检测代码(检测规则与插件差不多,比插件会少一些)。

问:为什么JAVA后端不使用sonar插件结合SonarQube服务做静态代码检测?
答:主要原因是想使用ali-p3c代码校验规则,导致在开发过程中无法快捷方便的检测,详细情况如下:
(1)SonarQube支持基于pmd的p3c代码规则,但是IDEA插件SonarLint不支持【仅支持SonarQube的默认规则,原因:https://blog.csdn.net/weixin_42617348/article/details/81170166 】,导致开发过程中不能便捷检测;
(2)maven-sonar-plugin支持检测p3c代码规则,不过每次都需要执行sonar:sonar命令,返回一个报告地址,需要去SonarQube服务页面上查看检测结果;
(3)jenkins通过maven-sonar-plugin插件可以集成sonar静态代码检测,并且可以阻塞获取检测结果,成功:进入下一个节点;失败:停止部署发版;
(4)IDEA的Alibaba Java Code Guidelines插件是专门检测p3c代码规则的,检测规则在ali-pmd.xml文件中(做了一些修改,去掉了一些规则,比如:UndefineMagicConstantRule);
(5)maven-pmd-plugin通过ali-pmd.xml可以与IDEA的Alibaba Java Code Guidelines插件保持相对一致的代码检测规则,这样在开发和发版过程都可以方便快捷的解决代码质量问题。
综上所述:最后选择使用maven-pmd-plugin插件配合自定义的代码检测规则ali-pmd.xml来做静态代码检测。

7. 【前端开发】vscode添加sonar插件

  1. 插件市场名字:SonarQube for IDE: Visual Studio Code (formerly SonarLint)
    插件官网地址
    注意: 下载sonarLint的版本要与sonarQube服务端版本(版本号:8.9)匹配,否则使用不了,插件作用参考4。

8. 【前端开发】sonar-scanner扫描

  1. 安装sonnar-scanner软件包 下载地址
  2. 配置环境变量
    SONAR_SCANNER_HOME=/path/to/sonar-scanner-[version] PATH=$SONAR_SCANNER_HOME/bin:$PATH
  3. 在项目的根目录下创建sonar-project.properties文件,内容如下【注意:修改projectName为项目名称】:

    #项目标识【必需】- 自行修改projectName
    sonar.projectKey=com.platomix:[projectName]
    #项目名称【必需】- 自行修改projectName
    sonar.projectName=[projectName]
    # 指定 SonarQube 服务器地址
    sonar.host.url=http://121.204.249.37:9100
    #项目版本号【可选】
    #sonar.projectVersion=1.0
    sonar.verbose=true
    sonar.login=8c31d6b3a1b0680b07eb009d68398bc8495c74f9
    # 需要分析的源码目录
    sonar.sources=src
    #源码的默认编码
    sonar.sourceEncoding=UTF-8
    #忽略文件
    sonar.exclusions=node_modules\**\*
    
  4. 在package.json中添加配置:

    {
    ...
    scripts: {
    //根据项目的情况,后面添加" & sonar-scanner"
    "eslint": "eslint & sonar-scanner"    
    }
    }