一、前言

1、本文主要内容

  • CentOS7下SonarQube部署
  • Maven扫描Java项目并将扫描结果提交到SonarQube Server
  • SonarQube扫描报表介绍

2、环境信息

工具/环境

版本

CentOS

CentOS 7.6(IP:192.168.88.45)

SonarQube

7.5

JDK

1.8.0

MySQL

5.7

3、准备工作

  • 安装JDK1.8

参考:https://ken.io/note/centos-java-setup

  • 安装MySQL

参考:https://ken.io/note/centos-mysql57-setup

二、部署SonarQube

1、基础准备

  • 安装必要的软件包
yum install -y wget zip unzip
  • 调整系统参数
sysctl -w  vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -u 4096 sonarqube
ulimit -n 65536 sonarqube

  

  • 创建专用账号sonar
#创建账号并授权
useradd sonar
passwd sonar #授予sudo权限
visudo
#在文件末尾增加
sonar ALL=(ALL) ALL

  

sonar 7.5版本必须在非root账号下启动

2、准备数据库及账号

#进入mysql-shell
mysql -u root -p #新建用户
CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'Sonar@2019';
CREATE USER 'sonar'@'%' IDENTIFIED BY 'Sonar@2019'; #新建数据库
CREATE DATABASE sonar; #赋予数据库访问权限
GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost';
GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%'; #刷新权限
FLUSH PRIVILEGES; #退出
quit;

  

3、下载

  • 准备软件以及数据目录
mkdir -p /usr/sonar
mkdir -p /sonar/data
mkdir -p /sonar/temp

  

  • 下载
#进入下载目录
cd /home/downloads #下载软件包
sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip #解压
sudo unzip sonarqube-7.5.zip -d /usr/sonar/

  

  • 授权
#授予相关目录权限
chown -R sonar:sonar /usr/sonar
chown -R sonar:sonar /sonar

  

4、配置环境变量

#修改profile文件
sudo vi /etc/profile #在文件末尾增加变量:SONAR_HOME
export SONAR_HOME=/usr/sonar/sonarqube-7.5 #使变量生效
source /etc/profile #测试
echo $SONAR_HOME

  

5、配置Sonar

#修改配置文件
sudo vi $SONAR_HOME/conf/sonar.properties #在配置文件开头增加以下配置 #数据库配置
sonar.jdbc.username=sonar
sonar.jdbc.password=Sonar@2019
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useConfigs=maxPerformance&rewriteBatchedStatements=true&characterEncoding=utf8&useUnicode=true&serverTimezone=GMT%2B08:00 #文件配置
sonar.path.data=/sonar/data
sonar.path.temp=/sonar/temp #Web配置
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.context=/

  

这里要强调的是,端口号需要>1000,因为sonar启动是使用的非root账号,默认是不能使用1000以下的端口的,否则会启动失败

6、开放端口

sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --reload

  

7、启动Sonar

#切换到sonar账号
su sonar #启动
sh $SONAR_HOME/bin/linux-x86-64/sonar.sh start #启动完成会看到以下输出
Starting SonarQube...
Started SonarQube. #如果未完成启动可以使用console命令查看启动过程中的问题
sh $SONAR_HOME/bin/linux-x86-64/sonar.sh console

  

sonar支持的启动参数: console | start | stop | restart | status | dump

如果启动完成,但是依然不能访问,可以通过以下命令查看启动日志

cat $SONAR_HOME/logs/web.log

  

成功启动后,可以访问 http://192.168.88.45:9000

这时候SonarQube会进行初始化,比如:初始化数据库。初始化完成后将看到首页

三、扫描项目示例

1、初始化Token

通过默认账号密码 admin,admin登录SonarQube,这时候会弹出引导

输入TokenName,然后点击Generate就会生成token,点击Continue 然后选择Java-Maven项目,这时候

token创建后,一旦窗口关闭就不能查询,只能再次创建,所以我们要先将token复制下来保存。

token创建:http://192.168.88.45:9000/account/security/

2、项目准备

本次我们以Java项目作为示例进行扫描,本机需要配置好了Java&Maven环境 参考:https://ken.io/note/java-quickstart-sde

如果已有Java项目可以忽略这一步

  • 创建项目
mvn archetype:generate \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DremoteRepositories=http://maven.aliyun.com/nexus/content/groups/public \
-DgroupId=io.ken.sonar \
-DartifactId=sonardemo \
-Dpackage=io.ken.sonar \
-Dversion=1.0

  

  • 修改pom.xml

增加build节点,指定默认build动作以及JDK版本

<build>
<defaultGoal>compile</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

  

3、扫描并提交

#进入项目根目录
cd sonardemo #执行扫描
mvn sonar:sonar \
-Dsonar.host.url=http://192.168.88.45:9000 \
-Dsonar.login=8e359701283af794e8b77f3029863a1be7ad8ee4

  

扫描完成访问:http://192.168.88.45:9000即可看到扫描结果

点击项目名字可以查看扫描详情

4、报表指标简介

指标

简介

Bugs

bug个数及评分

Vulnerabilities

安全漏洞个数及评分

Debt

债务(代码问题)持续时间

Code Smells

轻微问题:代码风格等等

Coverage

单元测试覆盖率

Duplications

代码重复率

Duplicated Blocks

代码重复块数

四、备注

1、附录


本文首发于我的独立博客:https://ken.io/note/sonarqube-install-and-code-scan-tutorial

SonarQube部署及代码质量扫描入门教程的更多相关文章

  1. Jenkins之自动部署、代码安全扫描、自动化接口测试

    搭建Jenkins wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.reporpm --i ...

  2. Windows安装使用SonarQube7.4 对java项目进行代码质量扫描

    我这里使用7.4因为使用JDK是1.8 其它版本看下依赖版本就好 1.下载7.4版本安装包 https://binaries.sonarsource.com/CommercialDistributio ...

  3. DevOps之持续集成SonarQube代码质量扫描

    一.SonarQube介绍       SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查 ...

  4. SonarQube代码质量扫描持续集成

    1.安装JDK和配置JAVA_HOME和CLASSPATH 2.安装mysql数据库 3.创建数据库和用户 mysql -u root -p mysql> CREATE DATABASE son ...

  5. jenkins+sonarQube代码质量扫描 并排除指定的目录

    sonar.projectKey=dev1-news-paymentsonar.projectName=dev1-news-paymentsonar.projectVersion=$BUILD_NUM ...

  6. Jenkins 集成Sonar代码质量扫描

    Jenkins上安装插件 在jenkins插件安装界面安装: 插件名 SonarQube Scanner for Jenkins Jenkins上配置 jenkins中操作:系统管理-系统设置,找到 ...

  7. jenkis +sonarqube 对后端代码静态扫描,钉钉群通知执行结果(记录)

    代码提交,触发后端sonar测试,测试完成,jenkins触发依赖任务,执行python脚本,达到预期,调用上线任务模块,进行上线,达不到预期,钉钉群通知. 牵涉到配置: 1.配置sonar测试任务 ...

  8. 2018-06-21 中文代码示例视频演示Python入门教程第五章 数据结构

    知乎原链 续前作: 中文代码示例视频演示Python入门教程第四章 控制流 对应在线文档: 5. Data Structures 这一章起初还是采取了尽量与原例程相近的汉化方式, 但有些语义较偏(如T ...

  9. 2018-06-20 中文代码示例视频演示Python入门教程第四章 控制流

    知乎原链 续前作: 中文代码示例视频演示Python入门教程第三章 简介Python 对应在线文档: 4. More Control Flow Tools 录制中出了不少岔子. 另外, 输入法确实是一 ...

随机推荐

  1. 消息队列(MQ)

    什么是消息队列 消息队列,即MQ,Message Queue. 消息队列是典型的:生产者.消费者模型.生产者不断向消息队列中生产消息,消费者不断的从队列中获取消息.因为消息的生产和消费都是异步的,而且 ...

  2. C++学习书籍推荐《C++编程思想第二版第二卷》下载

    百度云及其他网盘下载地址:点我 编辑推荐 “经典原版书库”是响应教育部提出的使用原版国外教材的号召,为国内高校的计算机教学度身订造的.<C++编程思想>(英文版第2版)是书库中的一本,在广 ...

  3. C语言学习书籍推荐《C和指针 Pointers On C》下载

    <C和指针 POINTERS ON C>提供与C语言编程相关的全面资源和深入讨论.本书通过对指针的基础知识和高 级特性的探讨,帮助程序员把指针的强大功能融入到自己的程序中去.  全书共18 ...

  4. Netty-Channel架构体系源码解读

    全文围绕下图,Netty-Channel的简化版架构体系图展开,从顶层Channel接口开始入手,往下递进,闲言少叙,直接开撸 概述: 从图中可以看到,从顶级接口Channel开始,在接口中定义了一套 ...

  5. linux应用程序设计--GDB调试

    GDB简介:GDB是GNU发布的一款功能强大的程序调试工具,GDB主要完成下面三个方面功能: 一.GDB的使用操作 1.启动被调试程序. 2.让被调试的程序在指定的位置停住. 3.当程序被停住时,可以 ...

  6. STM32F0_HAL库驱动描述——LL驱动程序概述

    LL驱动概述 低层(LL)驱动器旨在提供快速轻量级的专家导向层,它比硬件更接近硬件: 与HAL相反,LLAPI不适用于优化访问不是关键功能的外设设备,或者需要大量软件配置和/或复杂的高级堆栈(如USB ...

  7. 洛谷P4995 跳跳!题解

    求关注,求赞,求评论QAQ 题目:https://www.luogu.org/problemnew/show/P4995 简单描述一下吧,就是说有n块石头,起始可以跳到任何一块上面,接着也是,只不过每 ...

  8. php if语句

    一.前言 if语句 是几乎所有编程语言都有的函数. 当然我们最好的php这么最好的语言也有啦~ 二.搞起! 直接上代码不多哔哔.talk is cheap show me the code 2.1 i ...

  9. 个人永久性免费-Excel催化剂功能第97波-快递单号批量查询物流信息

    电商时代,快递已进千万家,做电商零售行业的,快递信息的再挖掘,也显得更有意义,是数据精细化运营中必不可少的一环.一般站在系统的角度,数据用于业务流转的增删改查使用,而对于分析需求来说,这些业务系统里集 ...

  10. jquery:为动态加载的元素绑定事件

    最近在做项目的时候发现的一个问题,通过ajax动态加载出来的一个button值绑定不了点击事件.我使用的是datatables这款表单插件,表单内容是通过ajax动态渲染出来的. 解决方案: 通过Go ...