在jenkins中集成sonar进行代码审查,实现持续集成CI/CD

这是我参与8月更文挑战的第7天,活动详情查看:8月更文挑战java

部份参考自 黑马程序员Java教程自动化部署Jenkins从环境配置到项目开发node

Sonar 集成

SonaQube简介

SonarQube是一个用于管理代码质量的开放平台,能够快速的定位代码中潜在的或者明显的错误。目前 支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检 测。mysql

查看源图像

环境

软件 版本
JDK 1.8
MySQL 5.7
SonarQube 7.7

安装MySQL

使用yum方式安装linux

  • centos7默认安装了MariaDB(MySQL的一个分支),因此因此执行yum install mysql如下命令只是更新Mariadb数据库
  • 咱们先检查一下Mariadb
 rpm -qa|grep mariadb
复制代码
  • 而后删除
 rpm -e --nodeps 名字
复制代码

源的安装

官网地址:dev.mysql.com/downloads/r…git

image-20210809104531133

  • 先看一下本身系统的版本
 cat /etc/redhat-release
复制代码

image-20210809104409853

  • 选择对应的版本进行下载
 wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
复制代码

image-20210809104514329

  • 安装
 sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm
复制代码
  • 选择版本程序员

    由于咱们要安装的是MySQL5.7版本,而默认安装会选择当前最新的稳定版本web

    因此先看一下当前yum库的全部MySQL版本sql

 yum repolist all | grep mysql
复制代码

image-20210809105459455

  • 可见8.0版本的已启用,其余的都禁用了数据库

    咱们用命令改一下编程

 sudo yum-config-manager --disable mysql80-community
 sudo yum-config-manager --enable mysql57-community
复制代码
  • 再查看一下,可见已成功修改默认安装版本

    image-20210809105738943

  • 查看当前启用的MySQL仓库

 yum repolist enabled | grep mysql
复制代码

image-20210809110219031

本体安装和使用

  • 安装
 sudo yum install mysql-community-server
复制代码
  • 启动
 sudo systemctl start mysqld.service
复制代码
  • 查看状态
 sudo systemctl status mysqld.service
复制代码
  • 查看初始密码

    MySQL第一次启动后会建立超级管理员帐号root@localhost,初始密码存储在日志文件中:

 sudo grep 'temporary password' /var/log/mysqld.log
复制代码

image-20210809120256967

  • 登陆
 mysql -uroot -p
复制代码
  • 修改初始密码
 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
复制代码

若是出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements的报告提示,是由于密码太简单了

MySQL默认的密码策略是要包含数字、大小写字母及特殊字符,长度大于8

image-20210809122451187

  • 容许root远程访问
 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
复制代码

而后刷新FLUSH PRIVILEGES;

  • 设置编码格式为UTF-8

    编辑/etc/my.cnf,[mysqld]节点增长如下代码:

     character_set_server=utf8
     init-connect='SET NAMES utf8'
    复制代码

image-20210809135358198

  • 设置开机启动
 systemctl enable mysqld
 systemctl daemon-reload
复制代码
  • 建立sonar数据库
 create database sonar;
复制代码

看一下成功没

 show databases;
复制代码

image-20210809135906413

安装sonar

 mkdir opt/sonar #建立目录
 wget 对应版本的下载连接 #下载压缩包
 unzip 名字.zip #解压
 useradd 名字 #建立sonar用户,必须sonar用于启动,不然报错
 chown -R 用户名. /opt/sonar #更改sonar目录及文件权限
复制代码
  • 修改sonar配置文件opt/sonarqube-版本号/conf/sonar.properties

    修改数据库链接用户名和密码,以及取消注释图中底行的链接地址

    Ps:sonar默认监听9000端口,若是9000端口被占用,须要更改。

image-20210810101256367

  • 启动sonar
 
 su 用户名 ./bin/linux-x86-64/sonar.sh start #启动
 su 用户名 ./bin/linux-x86-64/sonar.sh status #查看状态
 su 用户名 ./bin/linux-x86-64/sonar.sh stop #中止
 tail -f logs/sonar.log #查看日志
复制代码

image-20210810103508444

  • 登陆

    默认帐户:admin/admin

image-20210810113047465

  • 建立密钥

    输入密钥命,生成一串密钥,做为其余平台链接sonar的口令,要记下来

image-20210810113720492

在jenkins中集成

  • 运行逻辑:

image-20210810114118796

安装插件

  • 安装SonarQube Scanner插件

image-20210810114514867

安装SonarQube Scanner

  • 在jenkins中自动安装SonarQube Scanner

    【Manage Jenkins】->【Global Tool Configuration】->【SonarQube Scanner】

    能够选择最新版本

image-20210810115318969

添加凭证

  • 添加SonarQube凭证

    【Manage Jenkins】->【Manage Credentials】->【全局】->【添加凭证】

    选择【Secret test】类型,填入sonar的token密钥,写好凭据描述,点击肯定

image-20210810120438452

配置全局服务环境

  • 进行全局配置

    【Manage Jenkins】->【Configure System】->【SonarQube servers】

    填写名字、sonar的部署地址,选择上一步配好的证书

    点击应用,保存

image-20210811145257699

在项目中添加SonarQube代码审查

非流水线类型

首先演示的是直接在jenkins里输入

  • 在项目配置中,添加【Execute SonarQube Scanner】构建步骤

image-20210811145844555

选择jdk1.8,而后在【Analysis properties】输入框中输入用于sonar分析的相关参数,模板已给出

image-20210811150045607

模板:

 # must be unique in a given SonarQube instance
 # sonar中项目的惟一键值
 sonar.projectKey=web_demo 
 # this is the name and version displayed in the SonarQube UI. 
 sonar.projectName=web_demo
 sonar.projectVersion=1.0
 # Path is relative to the sonar-project.properties file. Replace "" by "/" on
 Windows.
 # This property is optional if sonar.modules is set.
 sonar.sources=. #扫描文件的路径
 sonar.exclusions=**/test/**,**/target/** #不扫描的文件
 sonar.java.source=1.8
 # Encoding of the source code. Default is default system encoding
 sonar.sourceEncoding=UTF-8
复制代码
  • 点击应用保存,而后构建

    image-20210811152821984

  • 构建完成后可在sonar中看到检测结构,成功

image-20210811152841491

流水线类型
  • 在项目文件下建立sonar-project.properties文件,写入同上一步同样的配置参数信息,修改一下项目名

image-20210811163828903

  • 修改Jenkinsfile脚本,添加代码审查步骤

    image-20210811162617986

 stage('check'){
     steps{
         script{
             scannerHome = tool 'SonarQube-Scanner' //引入工具,名字是以前在jenkins里安装scanner的名字
         }
         withSonarQubeEnv('SonarQube'){ //名字是以前在全局服务环境里配置的名字
             sh "${scannerHome}/bin/sonar-scanner" //引入sonar服务环境
         }
     }
 }
复制代码
  • 推送到gitlab,触发构建,成功

    image-20210811164343498

  • sonar也出了检测结果

    image-20210811164435640

  • 成功