一、SonarQube基本概述

1.1 什么是SonarQube

SonarQube 是一个开源的代码质量管理系统,用于检测代码中的错误、漏洞。它可以与 Jenkins 集成,让我们
能自动化进行代码质量扫描。

1.2 使用Sonarqube环境

1.SonarQube基于Java开发,所以需要安装 OpenJDK8 版本。
2.SonarQube需要依赖 MySQL 数据库,至少 5.6 版本以上。
3.SonarQube的小型实例至少需要4GB 内存,如果是大型实例需要 16GB

1.3 SonarQube服务安装

1.3.1 环境准备

[root@sonarqube ~]# systemctl stop firewalld[root@sonarqube ~]# systemctl disable firewalld
[root@sonarqube ~]# setenforce 0
setenforce: SELinux is disabled
[root@sonarqube ~]# yum install git java unzip wget -y

1.3.2 安装mysql数据库

1.安装 MySQL5.6 版本数据库

wget  --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql56-community-el7/mysql-communityserver-5.6.45-2.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql56-community-el7/mysql-communityclient-5.6.45-2.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql56-community-el7/mysql-communitycommon-5.6.45-2.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql56-community-el7/mysql-communitylibs-5.6.45-2.el7.x86_64.rpm
[root@sonarqube ~]# yum localinstall mysql-community-*

2.创建sonar库

[root@sonarqube ~]# mysql -uroot -p123456 -e "create database sonar charset utf8;"
[root@sonarqube ~]# mysql -uroot -p123456 -e "show databases;"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sonar              |
+--------------------+

1.3.3 安装sonarqube

1.下载 sonarqube,并安装解压至 /usr/local

wget https://binaries.sonarsource.com/Distributi on/sonarqube/sonarqube-7.0.zip
[root@sonarqube ~]# unzip sonarqube-7.0.zip -d /usr/local
[root@sonarqube ~]# ln -s /usr/local/sonarqube-7.0/ /usr/local/sonarqube

2.修改 sonarqube 连接数据库配置文件

sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

1.3.4 启动Sonarqube

启动 sonarqube 服务需要使用普通用户运行;如果使用root 则会启动失败;

[root@sonarqube ~]# useradd sonar
[root@sonarqube ~]# chown -R sonar.sonar /usr/local/sonarqube-7.0/[root@sonarqube ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start"

1.3.5 访问Sonarqube

1.通过浏览器输入 http://hostname:9000地址来访问sonarqube
点击登录–>输入用户名:admin 用户密码:admin


3.如何使用 SonarQube 质量分析;java 代码直接通过mvn即可分析;

mvn sonar:sonar \-Dsonar.host.url=http://sonar.bertwu.net:9000 \-Dsonar.login=a5eba929217499d5f17d15dbe750a39f4360ad32

4.如何使用SonarQube质量分析;非 java 代码则需要使用 sonar-scanner工具分析;

/usr/local/sonar-scanner/bin/sonar-scanner \-Dsonar.projectKey=html \-Dsonar.sources=. \-Dsonar.host.url=http://sonar.bertwu.net:9000 \-Dsonar.login=a5eba929217499d5f17d15dbe750a39f4360ad32

1.4 Sonarqube插件管理

Sonarqube默认已经安装了 C Java Python Php 等代码的质量分析工具;那我们为什么还需要安装插件?因为我们还需要检测 html等类型代码,而默认插件没有,所以需要安装;以便将代码检测的更加完善;

1.4.1 联网安装插件

联网安装插件比较简单,仅需要上应用市场搜索插件名称即可,如下以安装中文语言包插件为例;点击Administration > Marketplace --> 搜索框chinese,出现一个Chinese Pack,然后点击
install安装好的插件会存储至
usr/local/sonarqube/extensions/plugins/xx.jar

1.4.2 离线安装插件

由于 SonarQube 需要安装很多的插件,并且插件安装需要很长的时间;所以我们可以通过导入的方式来完成插件的安装;注意导入后需要重启 Sonarqube

[root@sonarqube ~]# rm -rf /usr/local/sonarqube/extensions/plugins/
[root@sonarqube ~]# tar xf sonar_plugins.tar.gz -C /usr/local/sonarqube/extensions
[root@sonarqube ~]# chown -R sonar.sonar /usr/local/sonarqube/extensions/plugins/
[root@sonarqube ~]# su - sonar -c "/usr/local/sonarqube/bin/linux-x86-64/sonar.sh restart"

二 、SonarQube代码检测

前面已经将 SonarQube服务以及插件安装完成,那么接下来只需要将代码推送至 Sonarqube 进行分析即可。

2.1 JAVA项目分析

Sonarqube 分析 JAVA 项目;进入项目目录,使用 mvn命令将代码直接推送至 Sonarqube 分析;

mvn sonar:sonar \-Dsonar.host.url=http://sonar.bertwu.net:9000 \-Dsonar.login=a5eba929217499d5f17d15dbe750a39f4360ad32 \-Dsonar.java.binaries=target/sonar

2.2 HTML项目分析

Sonarqube 分析 Html、php、go 项目;需要借助sonar-scanner客户端工具来完成代码的分析;
需要在项目所在的主机安装sonar-scanner
1.安装 sonar-scanner 命令;sonar-scanner下载地址

[root@jenkins ~]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
[root@jenkins ~]# unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /usr/local/
[root@jenkins ~]# ln -s /usr/local/sonar-scanner-4.0.0.1744-linux/ /usr/local/sonar-scanner

2.进入项目目录,使用 sonar-scanner 工具将代码推送Sonarqube 服务端进行分析;如果没有加入环境变量,则建议使用绝对路径

/usr/local/sonar-scanner/bin/sonar-scanner \-Dsonar.projectKey=html \-Dsonar.sources=. \-Dsonar.host.url=http://sonar.bertwu.net:9000 \-Dsonar.login=a5eba929217499d5f17d15dbe750a39f4360ad32

3.登陆 Sonarqube 查看项目分析结果;

三、Jenkins集成SonarQube

Jenkins 需要知道 Sonarqube 服务;以便能将代码推送指定服务节点;
Jenkins 需要知道 Sonar-Scanner 客户端工具,以便能正常调用

3.1 集成Sonarqube

1.插件安装;系统管理–>插件管理–>SonarQube Scanner for Jenkins

2.在 Jenkins 上配置 SonarQube 服务端地址;系统管理–>系统配置–>sonarQube (告诉jenkins
SonarQubeServers服务端地址)
Name 可以随意填写
URL 添加 SonarQube服务端地址;确保Jenkins能正
常访问;


如果 SonarQube 没有在配置->通用设置->权限->启用Force user authentication 则可忽略token 验证

3.2 集成Sonar-Scanner

在 Jenkins 上配置 Sonar-Scanner 客户端工具路径; 系统管理–>全局工具配置–>sonar-scanner(告诉jenkins SonarScanner在本地哪个路径)
1.Name 可以随意填写,但最好有规范
2.SONAR_RUNNER_HOME 填写 sonar-scanner 在Jenkins本地路径

3.3 Jenkins为项目添加测试阶段

1.java项目 maven质检方式

2.java项目 Scanner质检方式

sonar.projectName=${JOB_NAME} #项目在sonarqube上的显示名称
sonar.projectKey=${JOB_NAME} #项目的唯一标识,不能重复
sonar.sources=. #扫描哪个项目的源码
sonar.java.binaries=target/sonar


推荐用scanner方式质检

  1. html项目Scanner质检方式

    这样配置后,每次项目CI时候,先会进行质量检测,并将结果传送至SonarQube服务器。

四、Jenkins为项目添加通知阶段

4.1 配置钉钉

1.打开钉钉群组,点击设置–智能群助手–群机器人–添加机人–自定义机器人。(如果你不是群主,且群主开启了仅群主可管理,那么将无法创建机器人。)
2.添加一个自定义机器人
3.可以修改机器人名称,以及机器人的名字。(这块自行修改)
4.机器人修改成功后,会给出一个webhook地址。(此处的webhook后续jenkins需要使用)

https://oapi.dingtalk.com/robot/send?access_token=3e7e83379717a4bd052a928864d7bd1fbaa9df93aa473cc3b0f1c844aeea4996

4.2 Jenkins集成钉钉

1.Jenkins安装dingding插件。

2.配置钉钉机器人
系统管理----系统配置

4.3 为项目添加通知

4.3.1 .CI阶段通知质检结果

质检通知相对繁琐,需要自定义环境变量
1.启用钉钉机器人


2.编写质量检查脚本获取相关的值

[root@jenkins scripts]# cat dingding.sh
# 调用查询异常状态接口函数,该接口是在SonarQube平台直接爬的
function issues() {# 如果sonar启用了强制认证,可以通过添加 -u username:password 进行校验curl -sH "Content-Length:0" -X GET "http://10.0.0.130:9000/api/issues/search?resolved=false&facets=severities%2Ctypes&componentKeys=$1"
}# 类型
for i in {0..2}
doa=`issues $1 | jq '.facets[1].values['${i}'].val'`if [ ${a} = '"BUG"' ]thenBUG=$(echo "BUG:`issues $1 | jq '.facets[1].values['${i}'].count'`个")N_BUG=`issues $1 | jq '.facets[1].values['${i}'].count'`fiif [ ${a} = '"VULNERABILITY"' ]thenVULNERABILITY=$(echo "漏洞:`issues $1 | jq '.facets[1].values['${i}'].count'`个")N_VULNERABILITY=`issues $1 | jq '.facets[1].values['${i}'].count'`fiif [ ${a} = '"CODE_SMELL"' ]thenCODE_SMELL=$(echo "异味:`issues $1 | jq '.facets[1].values['${i}'].count'`个")fi
done# 严重程度
for i in {0..4}
dob=`issues $1 | jq '.facets[0].values['${i}'].val'`if [ ${b} = '"MINOR"' ]thenMINOR=$(echo "次要:`issues $1 | jq '.facets[0].values['${i}'].count'`个")fiif [ ${b} = '"MAJOR"' ]thenMAJOR=$(echo "主要:`issues $1 | jq '.facets[0].values['${i}'].count'`个")fiif [ ${b} = '"CRITICAL"' ]thenCRITICAL=$(echo "严重:`issues $1 | jq '.facets[0].values['${i}'].count'`个")fiif [ ${b} = '"INFO"' ]thenINFO=$(echo "提示:`issues $1 | jq '.facets[0].values['${i}'].count'`个")fiif [ ${b} = '"BLOCKER"' ]thenBLOCKER=$(echo "阻断:`issues $1 | jq '.facets[0].values['${i}'].count'`个")fi
done
# 如何将脚本的结果定义为系统变量,供钉钉调用 https://www.it1352.com/1470666.html
echo "BUG=${BUG}" > ${WORKSPACE}/build
echo "VULNERABILITY=${VULNERABILITY}" >> ${WORKSPACE}/build
echo "CODE_SMELL=${CODE_SMELL}" >> ${WORKSPACE}/build
echo "CRITICAL=${CRITICAL}" >> ${WORKSPACE}/build

3.jenkins中安装env插件

4.需要在Jenkins中定义环境变量

5.钉钉通知结果验证

4.3.2 .CD阶段通知质检结果

相对简单,可以用系统环境变量



CI/CD整体测试流程

Jenkins集成 SonarQube相关推荐

  1. jenkins集成sonarQube实现代码质量检查

    1.sonarQube的简介 SonarQube是一款自动化代码审查工具,用于检测代码中的错误.漏洞和代码异味.它可以与你现有的工作流集成,以支持跨项目分支和拉取请求的连续代码检查. 其工作流程如下: ...

  2. docker运行jenkins挂掉_【图文】Jenkins教程集成SonarQube

    什么是SonarQube? 看看维基百科的说明: SonarQube与CI/CD架构图 SonarQube与CI/CD架构图 Docker运行SonarQube 简单了解之后,开始安装SonarQub ...

  3. Jenkins+Gitlab+SonarQube 代码质量管理集成

    Jenkins+Gitlab+SonarQube 代码质量管理集成 一.环境准备 1.1.JDK11环境安装 1.2.Docker环境下搭建SonarQube所需的PostgreSQL数据库 1.2. ...

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

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

  5. 企业实战(Jenkins+GitLab+SonarQube)_12_Jenkins+soanr服务器搭建和代码检查

    文章目录 一.前期准备 1.1. jenkins 服务器搭建完成 1.2. sonarqube服务器搭建完成 二.Jenkins 配置 2.1. 安装 Sonar 插件 2.2. 配置 SonarQu ...

  6. Windows 环境 Jenkins集成构建SonarQube

    关于Windows搭建SonarQube_Mysql的相关操作先点击下面的链接,进行跳转. 操作手册: Windows搭建SonarQube_Mysql 启动Jenkins有2种方式: 第1种:jav ...

  7. Linux环境 Jenkins集成构建SonarQube

    参考链接: https://www.linuxhub.org/?p=4450 https://blog.51cto.com/damaicha/2118766 https://max.book118.c ...

  8. jenkins与SonarQube集成

    一.SonarQube 我的理解是,SonarQube就是一个对代码进行分析的平台,其功能可以通过插件扩展.支持多种语言,也支持静态代码检查.发现潜在bug等. 以下是参考信息: 维基百科:https ...

  9. Jenkins集成Sonar(3/3)- 安装SonarQube Scanner进行扫描(离线安装)

    安装方式选择: 在线安装:直接在Jenkins>系统管理>插件管理>可选插件,搜索Sonar 离线安装:下载sonar插件,将插件解压放入~/.jenkins/plugins/下即可 ...

最新文章

  1. 城市生态的机器人革命
  2. 成都Uber优步司机奖励政策(2月1日)
  3. html右键禁用和web页面中添加加入qq群的方式
  4. sys.stderr.write(f“ERROR: {exc}“) SyntaxError: invalid syntax错误
  5. Material Design
  6. mysql创建非聚集索引_一文看懂聚集索引和非聚集索引的区别
  7. 使用脚本编写 Vim 编辑器,第 5 部分: 事件驱动的脚本编写和自动化
  8. 一致性环Hash算法.NET实现
  9. 【转】1:C#的三种异步的详细介绍及实现
  10. windows驱动开发学习
  11. SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
  12. ThinkPHP3.2 下载、导入、导出功能的设计与实现
  13. OpenCV人脸识别之一:数据收集和预处理
  14. vs2010转移ipch和sdf的位置
  15. 奔驰北京工厂两年内将再投产三款电动车;希尔顿中国市场第300家酒店开业 | 美通企业日报...
  16. 用access建立一个试题库_access试题库_答案
  17. 【入门教程】必看!TensorFlow中文教程:机器学习从零到一
  18. Oracle 字典表
  19. 威尔·史密斯[Will Smith]
  20. SpringBoot+Mybatis+Mysql+Vue+ElementUi实现一个《流浪猫狗领养救助管理系统》毕业设计(超详细教程)

热门文章

  1. SW1900K桌面式超高频读卡器_键盘接口
  2. 集成灶和油烟机哪个更实用?用集成灶轻松打造绝美开放式厨房
  3. JavaScript正则表达式简单教程
  4. 操作系统进程相关-以Linux0.11和MINIX为代表
  5. python练习题12:数据库基础
  6. 深度评测 Acer 掠夺者刀锋500SE 2021 怎么样
  7. 使用gparted修改ubuntu分区大小
  8. 解决报错:‘egg-bin‘不是内部或外部命令,也不是可运行的程序或批处理文件。
  9. 离散型随机变量和连续型随机变量及其常见分布
  10. hadoop可以解决什么问题_一个50岁的人负债累累,干点什么能解决问题?可以做这些...