前言

SonarQube是一个开源的代码质量管理平台,可以用于静态代码分析、代码质量管理和代码审查等。本主题将提供SonarQube的安装和使用指南,包括如何下载和安装SonarQube,如何配置和启动SonarQube服务器,如何使用SonarQube进行代码分析和报告生成等内容。通过本指南,读者可以快速掌握SonarQube的基本用法及p3c规则配置,提高代码质量和可维护性。

关于SonarQube

SonarQube是一个开源的代码质量管理平台,旨在帮助开发团队通过静态分析来提高其代码的质量、安全性和可维护性。

SonarQube可以检测各种编程语言的代码缺陷和安全漏洞,例如Java、C#、Python、JavaScript等。它提供了一个易于使用的Web界面,其中包含了各种报告和分析工具,以帮助开发团队更好地理解其代码质量问题。

SonarQube可以集成到开发工具链中,例如Maven、Gradle、Jenkins等,以便于在代码提交或构建时自动运行代码分析并提供反馈。它还可以与CI/CD流程集成,以帮助团队在构建和部署阶段及时发现和解决问题。

SonarQube的主要功能包括代码分析、代码规范检查、代码复杂度分析、安全漏洞检测等。它还提供了自定义规则、扩展插件等高级功能,以帮助团队满足其特定的代码质量要求和标准。

安装SonarQube

提示:sonarqube有JDK版本限制要求,可以访问官方文档查看,本文基于8.9.6-lts进行安装,下面是该版本支持的平台

image-20220110104442283

下面是支持的数据库及版本,不支持MySQL

image-20220110104520651

本文将使用docker-compose方式编排docker容器部署,其他方式有时间再补充

docker启动方式

需提前安装docker环境和docker-compose工具

docker:https://www.runoob.com/docker/centos-docker-install.html

docker-compose:

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
  • 编写docker-compose.yml
version: "3"

services:
  sonarqube:
    image: sonarqube:lts-community
    depends_on:
      - db
    environment:
      TZ: Asia/Shanghai
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - /opt/data/sonarqube/data:/opt/sonarqube/data
      - /opt/data/sonarqube/extensions:/opt/sonarqube/extensions
      - /opt/data/sonarqube/logs:/opt/sonarqube/logs
      - /opt/data/sonarqube/conf:/opt/sonarqube/conf
    ports:
      - "9000:9000"
  db:
    image: postgres:12
    ports:
     - "5431:5432"
    environment:
      TZ: Asia/Shanghai
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      POSTGERS_DB: sonar
    volumes:
      - /opt/data/postgresql:/var/lib/postgresql
      - /opt/data/postgresql/data:/var/lib/postgresql/data
  • 启动
docker-compose up -d

报错

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

  • 解决方法:

在/etc/sysctl.conf文件最后添加一行vm.max_map_count=262144

image-20220107113107355

执行/sbin/sysctl -p 立即生效

image-20220107113139131

使用SonarQube

访问页面

正常来说,页面地址为ip:9000,如http://10.8.46.203:9000

用户名admin,密码admin

然后设置密码

image-20220107113731647

安装中文插件

Administration-Marketplace

image-20220107114118127

安装后会提示需要重启,点击restart即可

集成阿里巴巴p3c

安装

下载sonar-pmd-plugin-3.2.0-SNAPSHOT.jar,上传至/opt/data/sonarqube/extensions/plugins/(sonarqube扩展插件地址),然后重启服务器。
附下载链接

配置p3c规则

  1. 进入SonarQube地址,进入质量配置,点击创建

    image-20220110103617054

  2. 填写新配置信息,名称自定义,如p3c,语言选Java,其他保持默认即可,然后点击创建

    image-20220110103759101

  3. 创建后自动调整配置页面,点击更多激活规则

    image-20220110103836845

  4. 在过滤器搜索关键词p3c,可以看到 右边这个版本有51条规则,点批量修改,选择激活p3c,就可以将规则加到过滤器中

    image-20220110104048885

    image-20220110104127008

  5. 质量配置页面,下拉至Java配置,可以看到新增的p3c配置,点右边的下拉框,将配置设置为默认即可

    image-20220110104251455

扫描项目并上传报告至SonarQube

根据构建工具使用插件(如Maven等)

  1. 在项目页面,新增项目

    image-20220110110926461

  2. 在项目,点击配置分析器

    image-20220110110952306

  3. 输入或创建令牌,点继续

    image-20220110111046304

  4. 根据构建技术,会有不同的命令

    image-20220110111122944

  5. 复制命令到CMD执行

    image-20220110111200621

使用SonarScanner插件

  1. https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/下载SonarScanner插件

  2. bin目录配置到Path

    • Linux

      export SONAR_HOME=/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/sonar
      export PATH=$PATH:$SONAR_HOME/bin
      source /etc/profile
      
    • Windows

      在环境变量Path新增一行,填写SonarScanner的bin目录路径

  3. 使用命令

    • Linux

      sonar-scanner \
        -Dsonar.projectKey=lbx-ai-wdz-people-count \
        -Dsonar.sources=. \
        -Dsonar.host.url=http://10.8.46.203:9000 \
        -Dsonar.login=1111
      
    • Windows

      sonar-scanner.bat -D"sonar.projectKey=lbx-ai-wdz-people-count" -D"sonar.sources=." -D"sonar.host.url=http://10.8.46.203:9000" -D"sonar.login=1111"