Jenkins集成 SonarQube

您所在的位置:网站首页 Sonarqube每次只能启动一个scanner Jenkins集成 SonarQube

Jenkins集成 SonarQube

2023-09-24 01:34| 来源: 网络整理| 查看: 265

一、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} do a=`issues $1 | jq '.facets[1].values['${i}'].val'` if [ ${a} = '"BUG"' ] then BUG=$(echo "BUG:`issues $1 | jq '.facets[1].values['${i}'].count'`个") N_BUG=`issues $1 | jq '.facets[1].values['${i}'].count'` fi if [ ${a} = '"VULNERABILITY"' ] then VULNERABILITY=$(echo "漏洞:`issues $1 | jq '.facets[1].values['${i}'].count'`个") N_VULNERABILITY=`issues $1 | jq '.facets[1].values['${i}'].count'` fi if [ ${a} = '"CODE_SMELL"' ] then CODE_SMELL=$(echo "异味:`issues $1 | jq '.facets[1].values['${i}'].count'`个") fi done # 严重程度 for i in {0..4} do b=`issues $1 | jq '.facets[0].values['${i}'].val'` if [ ${b} = '"MINOR"' ] then MINOR=$(echo "次要:`issues $1 | jq '.facets[0].values['${i}'].count'`个") fi if [ ${b} = '"MAJOR"' ] then MAJOR=$(echo "主要:`issues $1 | jq '.facets[0].values['${i}'].count'`个") fi if [ ${b} = '"CRITICAL"' ] then CRITICAL=$(echo "严重:`issues $1 | jq '.facets[0].values['${i}'].count'`个") fi if [ ${b} = '"INFO"' ] then INFO=$(echo "提示:`issues $1 | jq '.facets[0].values['${i}'].count'`个") fi if [ ${b} = '"BLOCKER"' ] then BLOCKER=$(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整体测试流程 在这里插入图片描述



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3