使用Sonar集成Jenkins进行代码静态检查

时间:2022-09-24 13:23:33

Sonar简介

Sonar是一个用于代码质量管理的开源平台, 用于管理源代码质量。通过插件机制,Sonar 可以集成不同的测试工具,代码分析工具,以及持续集成工具,比如pmd-cpd、checkstyle、findbugs、Jenkins。通过不同的插件对这些结果进行再加工处理,通过量化的方式度量代码质量的变化,从而可以方便地对不同规模和种类的工程进行代码质量管理。

Sonar在Jenkins里的安装以及配置

使用Jenkins做CI/CD, 把Sonar集成到Jenkins就可以实现自动触发代码质量检查。

  1. 安装Sonar Server端
    • 创建数据库
      MySQL docker-compose文件如下:
    # cat docker-compose.yml
version: '2'
services:
mysql:
image: mysql
environment:
- MYSQL_ROOT_PASSWORD=sonar
ports:
- "33306:3306"
restart: always
创建sonar数据库以及用户语句
     CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE USER 'sonar' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
  • 安装sonar服务器端

    sonar docker-compose文件如下:

    version: '2'
services:
sonar:
image: sonarqube
ports:
- "9000:9000"
- "9092:9092"
environment:
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- SONARQUBE_JDBC_URL=jdbc:mysql://xxx:33306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
- SONARQUBE_JDBC_DRIVERCLASSNAME=com.mysql.jdbc.Driver

volumes:
- /etc/localtime:/etc/localtime
restart: always
使用命令docker-compose up -d启动,sonar服务器端就可以启动成功了,通过url http://IP:9000 就可以访问sonar服务器端。
  1. sonar集成到Jenkins
    • 在Jenkins上安装sonar插件
    • 系统配置 -> 配置sonar服务器地址
    • 配置需要添加sonar静态检查的Jenkins Job
      1) 构建环境时点选 “Prepare SonarQube Scanner environment”
      2) 在构建后添加 “Execute SonarQube Scanner”
      并在Analysis properties中添加如下配置:
        sonar.projectKey= xxx
sonar.projectName= xxx
sonar.projectVersion=1.0.0
sonar.sources=app/
sonar.sourceEncoding=UTF-8
  如果分成多个module
        sonar.projectKey= xxx
sonar.projectName= xxx
sonar.projectVersion=1.0.4
sonar.sources=.
sonar.sourceEncoding=UTF-8
sonar.modules=module1,module2,module3
module1.sonar.projectBaseDir=module1/
module2.sonar.projectBaseDir=module2/
module3.sonar.projectBaseDir=module3/
 如果要配置sonar支持java lombok
在mvn 编译选项里添加 “dependency:copy-dependencies”
然后设置sonar.java.binaries 以及sonar.java.libraries
        sonar.projectKey= xxx
sonar.projectName= xxx
sonar.projectVersion=1.0.4
sonar.sources=.
sonar.sourceEncoding=UTF-8
sonar.java.binaries=target/classes
sonar.java.libraries=target/dependency/*.jar
sonar.modules=module1,module2,module3
module1.sonar.projectBaseDir=module1/
module2.sonar.projectBaseDir=module2/
module3.sonar.projectBaseDir=module3/