SonarQube代码检测平台

SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube我们可以检测出项目中重复代码, 潜在bug, 代码规范,安全性漏洞等问题, 并通过SonarQube web UI展示出来。

简介

1、sonarQube是什么?

1、代码质量和安全扫描和分析平台。
2、多维度分析代码:代码量、安全隐患、编写规范隐患、重复度、复杂度、代码增量、测试覆盖率等。
3、支持25+编程语言的代码扫描和分析,包含java\python\C#\javascript\go\C++等。
4、涵盖了编程语言的静态扫描规则: 代码编写规范+安全规范。
5、能够与代码编辑器、CI/CD平台完美集成。
6、能够与SCM集成,可以直接在平台上看到代码问题是由哪位开发人员提交。
7、帮助程序猿写出更干净、更安全的代码。

静态扫描主要针对开发人员编写的源代码。
通过定义好的 代码质量和安全规则,对开发人员编写的代码进行扫描和分析。
将分析的结果多维护的呈现出来,以方便开发人员进行代码的优化和规范编写。

2、sonarQube如何工作?

sonar静态代码扫描由2部分组成:sonarQube平台,sonar-scanner扫描器。
sonarQube: web界面管理平台。
​ 1)展示所有的项目代码的质量数据。
​ 2)配置质量规则、管理项目、配置通知、配置SCM等。
sonarScanner: 代码扫描工具。
​ 专门用来扫描和分析项目代码。支持20+语言。
​ 代码扫描和分析完成之后,会将扫描结果存储到数据库当中,在sonarQube平台可以看到扫描数据。

3、检测

Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量
通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测
SonarQube可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。
(1) 不遵循代码标准
SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
(2) 潜在的缺陷
SonarQube可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。
(3) 糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员 难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
(4) 重复
显然程序中包含大量复制粘贴的代码是质量低下的,SonarQube可以展示 源码中重复严重的地方。
(5) 注释不足或者过多
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降 而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
(6) 缺乏单元测试
SonarQube可以很方便地统计并展示单元测试覆盖率。
(7) 糟糕的设计
通过SonarQube可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过SonarQube可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。

SonarQube与项目持续集成架构图

SonarQube代码检测平台_第1张图片

部署

sysctl -w vm.max_map_count=262144

单机

docker run -itd --name sonar -e SONARQUBE_JDBC_USERNAME=root -e SONARQUBE_JDBC_PASSWORD=admin -e SONARQUBE_JDBC_URL='jdbc:mysql://127.0.0.1:30369/sonar?useUnicode=true&characterEncoding=utf8' -p 9000:9000 sonarqube:6.7.5

编排

两种方法均可

docker pull postgres 
docker pull sonarqube:8.9.6-community
version: '3.1'
services:
  db:
    image: postgres
    container_name: db
    ports:
      - 5432:5432
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
  sonarqube:
    image: sonarqube:8.9.6-community
    container_name: sonarqube
    depends_on:
      - db
    ports:
      - 9000:9000
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWOORD: sonar
networks:
  sonarnet:
    driver: bridge
# 默认用户和密码都是admin
-----------------------
version: '3'
services:
  postgres:
    image: postgres
    restart: always
    privileged: true
    container_name: sonarqube_postgres
    ports:
      - 5432:5432
    volumes:
      - /data/sonarqube/db/postgresql/:/var/lib/postgresql
      - /data/sonarqube/db/datasql/:/var/lib/postgresql/data
    environment:
      TZ: Asia/Shanghai   
      POSTGRES_USER: sonar  
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonar
    networks:
      - sonarnet
  sonar:
    image: sonarqube:6.7.5
    restart: always
    container_name: sonarqube
    privileged: true
    depends_on:
      - postgres
    volumes:
      - /data/sonarqube/sonarqube/extensions:/opt/sonarqube/extensions
      - /data/sonarqube/sonarqube/logs:/opt/sonarqube/logs
    ports:
      - 9000:9000
    environment:    #连接postgres数据库的配置信息
      SONARQUBE_JDBC_USERNAME: sonar
      SONARQUBE_JDBC_PASSWORD: sonar
      SONARQUBE_JDBC_URL: jdbc:postgresql://postgres:5432/sonar
    networks:
      - sonarnet
 
networks:
  sonarnet:
    ipam:
      config:
        - subnet: 192.168.114.0/24     #这里可以看各自的环境进行配置

集成

使用MAVEN对代码扫描(配置文件settings.xml)

# 放到jdk下面即可
<profile>
    <id>sonar</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <sonar.login>admin</sonar.login>
        <sonar.password>123456789</sonar.password>
        <sonar.host.url>http://192.168.1.1:9000</sonar.host.url>
    </properties>
</profile>
<activeProfile>sonar</activeProfile> 
# mvn sonar:sonar			访问sonarqube首页即可看到对应项目

Jenkins使用

jenkins服务器部署扫描器 sonar-scanner
参考链接
官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
在项目文件夹下执行:

sonar-scanner -Dsonar.projectKey=test -Dsonar.sources=. -Dsonar.host.url=http://127.0.0.1:9000 -Dsonar.login=6a14734cf871e3ed2d694bbb71dc8fd0b9193d8b

其中Dsonar.host.url为服务端地址,Dsonar.login为登录生成的token,这样就能在客户端检查代码,将结果发送到服务端了!

Jenkins 如何与 SonarQube 集成
SonarQube代码检测平台_第2张图片
Life will only bully the poor, if there is no money love will run away!

你可能感兴趣的:(Docker-Compose,java,数据库,前端,运维,devops)