Jenkins集成 SonarQube
一、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方式质检
- 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相关推荐
- jenkins集成sonarQube实现代码质量检查
1.sonarQube的简介 SonarQube是一款自动化代码审查工具,用于检测代码中的错误.漏洞和代码异味.它可以与你现有的工作流集成,以支持跨项目分支和拉取请求的连续代码检查. 其工作流程如下: ...
- docker运行jenkins挂掉_【图文】Jenkins教程集成SonarQube
什么是SonarQube? 看看维基百科的说明: SonarQube与CI/CD架构图 SonarQube与CI/CD架构图 Docker运行SonarQube 简单了解之后,开始安装SonarQub ...
- Jenkins+Gitlab+SonarQube 代码质量管理集成
Jenkins+Gitlab+SonarQube 代码质量管理集成 一.环境准备 1.1.JDK11环境安装 1.2.Docker环境下搭建SonarQube所需的PostgreSQL数据库 1.2. ...
- DevOps之持续集成SonarQube代码质量扫描
SonarQube是一个用于代码质量检测管理的开放平台,可以集成不同的检测工具,代码分析工具,以及持续集成工具.SonarQube 并不是简单地把不同的代码检查工具结果直接显示在 Web ...
- 企业实战(Jenkins+GitLab+SonarQube)_12_Jenkins+soanr服务器搭建和代码检查
文章目录 一.前期准备 1.1. jenkins 服务器搭建完成 1.2. sonarqube服务器搭建完成 二.Jenkins 配置 2.1. 安装 Sonar 插件 2.2. 配置 SonarQu ...
- Windows 环境 Jenkins集成构建SonarQube
关于Windows搭建SonarQube_Mysql的相关操作先点击下面的链接,进行跳转. 操作手册: Windows搭建SonarQube_Mysql 启动Jenkins有2种方式: 第1种:jav ...
- Linux环境 Jenkins集成构建SonarQube
参考链接: https://www.linuxhub.org/?p=4450 https://blog.51cto.com/damaicha/2118766 https://max.book118.c ...
- jenkins与SonarQube集成
一.SonarQube 我的理解是,SonarQube就是一个对代码进行分析的平台,其功能可以通过插件扩展.支持多种语言,也支持静态代码检查.发现潜在bug等. 以下是参考信息: 维基百科:https ...
- Jenkins集成Sonar(3/3)- 安装SonarQube Scanner进行扫描(离线安装)
安装方式选择: 在线安装:直接在Jenkins>系统管理>插件管理>可选插件,搜索Sonar 离线安装:下载sonar插件,将插件解压放入~/.jenkins/plugins/下即可 ...
最新文章
- 城市生态的机器人革命
- 成都Uber优步司机奖励政策(2月1日)
- html右键禁用和web页面中添加加入qq群的方式
- sys.stderr.write(f“ERROR: {exc}“) SyntaxError: invalid syntax错误
- Material Design
- mysql创建非聚集索引_一文看懂聚集索引和非聚集索引的区别
- 使用脚本编写 Vim 编辑器,第 5 部分: 事件驱动的脚本编写和自动化
- 一致性环Hash算法.NET实现
- 【转】1:C#的三种异步的详细介绍及实现
- windows驱动开发学习
- SpringBoot2.0 基础案例(08):集成Redis数据库,实现缓存管理
- ThinkPHP3.2 下载、导入、导出功能的设计与实现
- OpenCV人脸识别之一:数据收集和预处理
- vs2010转移ipch和sdf的位置
- 奔驰北京工厂两年内将再投产三款电动车;希尔顿中国市场第300家酒店开业 | 美通企业日报...
- 用access建立一个试题库_access试题库_答案
- 【入门教程】必看!TensorFlow中文教程:机器学习从零到一
- Oracle 字典表
- 威尔·史密斯[Will Smith]
- SpringBoot+Mybatis+Mysql+Vue+ElementUi实现一个《流浪猫狗领养救助管理系统》毕业设计(超详细教程)
热门文章
- SW1900K桌面式超高频读卡器_键盘接口
- 集成灶和油烟机哪个更实用?用集成灶轻松打造绝美开放式厨房
- JavaScript正则表达式简单教程
- 操作系统进程相关-以Linux0.11和MINIX为代表
- python练习题12:数据库基础
- 深度评测 Acer 掠夺者刀锋500SE 2021 怎么样
- 使用gparted修改ubuntu分区大小
- 解决报错:‘egg-bin‘不是内部或外部命令,也不是可运行的程序或批处理文件。
- 离散型随机变量和连续型随机变量及其常见分布
- hadoop可以解决什么问题_一个50岁的人负债累累,干点什么能解决问题?可以做这些...