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与项目持续集成架构图

在这里插入图片描述

部署

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 集成
在这里插入图片描述
Life will only bully the poor, if there is no money love will run away!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星光落入你灰蒙蒙的眼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值