关于Sonar Qube

Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题,可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来。

搭建服务

1、编写docker compose文件

#创建并切换目录
mkdir -p /opt/sonar && cd mkdir /opt/sonar
#创建compose文件
vim docker-compose.yaml

version: "3.1"
services:
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    networks:
      - sonar
    volumes:
      - ./postgresql/data:/var/lib/postgresql/data
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: sonarqube:9.8-community
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - "9000:9000"
    networks:
      - sonar
    volumes:
      - ./sonar/data:/opt/sonarqube/data
      - ./sonar/extensions:/opt/sonarqube/extensions
      - ./sonar/logs:/opt/sonarqube/logs
      - ./sonar/conf:/opt/sonarqube/conf
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
networks:
  sonar:
    driver: bridge

2、修改系统参数

vim /etc/sysctl.conf

在文件最下方增加参数

vm.max_map_count=262144

保存退出后执行命令

sysctl -p

3、启动容器

docker compose up -d

说明:我这里使用的是docker compose v2以上版本,如果是v1版本要使用命令 docker-compose up -d

等待拉取完镜像并且启动以后,可以观察Sonar Qube是否启动完成,docker logs -f sonarqube –tail 100

4、访问Sonar Qube

访问IP+9000端口,默认账户密码都是admin,第一次登陆后会要求修改密码

5、增加中文插件

先确认一下才能安装

安装完成后点击重启

重启完成后

6、使用Sonar Qube

调用Sonar Qube的方法有以下几种

  • Maven调用
  • 通过Sonar Qube命令调用
  • Jenkins等持续集成工具调用

我这里使用Maven调用方式,先在Maven的settings文件中添加Sonar Qube

<profile>
      <id>sonar</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <sonar.login>admin</sonar.login>
        <sonar.password>123456</sonar.password>
        <sonar.host.url>http://192.168.0.13:9000</sonar.host.url>
      </properties>
</profile>

也可以不使用账号密码,生成token后连接SonarQube进行使用(SonarQube官方建议使用此方法)

创建完成后复制token,写入maven配置文件

添加配置后在Maven构建前或构建后执行mvn sonar:sonar

到这里就已经完成了Sonar Qube的搭建以及基本使用,其他调用方式我没有去试,我只是在Jenkins构建过程中增加步骤执行mvn sonar:sonar命令