Linux环境安装SonaQube,Jenkins使用SonaQube代码审查

一、SonaQube 介绍

1、SonarQube 特性

多语言的平台: 支持超过20种编程语言,包括Java、Python、C#、C/C++、JavaScript等常用语言。
自定义规则: 用户可根据不同项目自定义Quality Profile以及Quality Gates。
丰富的插件: SonarQube 拥有丰富的插件,从而拥有强大的可扩展性。
持续集成: 通过对某项目的持续扫描,可以对该项目的代码质量做长期的把控,并且预防新增代码中的不严谨和冗余。
质量门: 在扫描代码后可以通过对“质量门”的比对判定此次“构建”的结果是否通过,质量门可以由用户定义,由多维度判定是否通过。

2、在项目中一般流程为:

(1) 项目人员开发代码。
(2) 将代码推送到持久化仓库,如 Git。
(3) Jenkins 进行代码拉取,然后利用 SonarQube 扫描器进行扫描分析代码信息。
(4) 将分析结果等信息上传至 SonarQube Server 服务器进行分类处理。
(5) SonarQube 将分析结果等信息持久化到数据库,如 Mysql。
(6) 开发人员访问 SonarQube UI 界面访问,查看扫描出的结果信息进行项目优化。

Jenkins 如何与 SonarQube 集成图分析

在这里插入图片描述

二、Linux 环境安装 SonaQube

这里用的是 sonarqube-7.6 的版本。官网提供的版本是 sonarqube-8.2官网安装链接,或自定义版本 各版本选装链接

1、安装 SonarQube 前需要先安装 Mysql 数据库

这里是使用 Yum 安装 Mysql,版本 MySQL/5.7.27

yum localinstall  http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm -y
yum install mysql-community-server -y
yum install mysql-community-devel -y
启动数据库
systemctl enable mysqld
systemctl start mysqld

修改数据库密码,授权用户连接登录

初始化前密码在此路径下
grep 'temporary password' /var/log/mysqld.log
修改 mysql root 密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
授权用户远程登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
刷新
flush privileges;

连接数据库,创建 sonar 数据库
mysql> create database sonar;
2、下载并配置 SonaQube
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.6.zip
unzip sonarqube-7.6.zip
mv sonarqube-7.6 /usr/local/sonar
useradd sonar 创建sonar用户,必须sonar用于启动,否则报错
chown -R sonar. /usr/local/sonar 更改sonar目录及文件权限

修改sonar配置文件
vim /usr/local/sonar/conf/sonar.properties
修改的内容如下:
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
注意:sonar默认监听9000端口,如果9000端口被占用,需要更改。这里改为9900
sonar.web.port=9900
3、启动 SonaQube
cd /opt/sonar
su sonar ./bin/linux-x86-64/sonar.sh start 启动
su sonar ./bin/linux-x86-64/sonar.sh status 查看状态
su sonar ./bin/linux-x86-64/sonar.sh stop 停止
tail -f logs/sonar.logs 查看日志

访问 SonaQube :http://localhost:9900,默认账户: admin/admin
添加 token
在这里插入图片描述

三、Jenkins 安装 SonaQube 插件和环境配置

1、安装SonarQube Scanner插件

在这里插入图片描述

2、添加新凭证

在 Jenkins 中添加新的凭证,类型为 Secret text,Secret 就是刚创建的 token 值
添加凭证的操作可参考:Jenkins使用手册-凭证管理
在这里插入图片描述

3、Jenkins进行SonarQube配置

Manage Jenkins -> Configure System -> SonarQube servers
名字可以随便命名,这里命名为:jenkins,名字后续会用到
在这里插入图片描述
Manage Jenkins -> Global Tool Configuration
选择自动安装,再选择安装的版本即可,,名字为:sonar-scanner ,后续会用到
在这里插入图片描述

4、SonaQube 关闭审查结果上传到SCM功能

在这里插入图片描述

四、项目添加 SonaQube 代码审查

审查的步骤:
在这里插入图片描述

SonaQube 代码审查 ,流水线项目或者非流水线项目

常用的项目类型可参考文档:Jenkins项目常用三种构建类型风格详解

(1)在项目添加 SonaQube 代码审查:(非流水线项目)
添加构建步骤 选择Execute SonaQube Scanner:

在这里插入图片描述
Analysis properties 代码片段

sonar.projectKey=demo_free_style_passwd
sonar.projectName=demo_free_style_passwd
sonar.projectVersion=1.0
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
sonar.sourceEncoding=UTF-8

构建完成后可看到对应的代码审查结果
在这里插入图片描述

(2)在项目添加 SonaQube 代码审查:(流水线项目)
1、项目根目录下,创建 sonar-project.properties 文件

在这里插入图片描述

# 项目在 SonarQube 的唯一标识,不能重复
sonar.projectKey=web_demo_Pipeline_key
# 项目名称 
sonar.projectName=web_demo_Pipeline_key
# 项目版本
sonar.projectVersion=1.0
# 项目语言,例如 Java、C#、PHP 等
# sonar.language: 
# 需要扫描的项目源代码目录,点代表是扫描根下面的全部,也可以指定目录“例如:/src”
sonar.sources=.
#  编译后 test下或target下 文件目录
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
# sonar.sourceEncoding: 编码方式
sonar.sourceEncoding=UTF-8
2、修改Jenkinsfile,加入SonarQube代码审查阶段

脚本的路径在根下:
在这里插入图片描述
脚本的命令:

pipeline {
   agent any
   stages {
      stage('pull code') {
         steps {
            checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'ed3147fc-c68b-418c-a479-15dd80710051', url: 'git@github.com:arosendeng/rosen-jenkins.git']]])
         }
      }
      stage('build projeck') {
         steps {
            sh label: '', script: 'mvn clean package'
         }
      }
    stage('SonarQube Code detection') {
         steps{
            script {
                scannerHome = tool 'sonar-scanner'
                    }
            withSonarQubeEnv('jenkins') {
                sh "${scannerHome}/bin/sonar-scanner"
                    }
                }
            }
      stage('push code') {
         steps {
             deploy adapters: [tomcat9(credentialsId: 'b1ca6678-8339-43bb-a0da-c3935c509dc2', path: '', url: 'http://192.168.66.102:8080/')], contextPath: null, war: 'target/*.war'
         }
      }      
   }
    post {
        always { //构建完成后邮件通知
            emailext body: '${FILE,path="src/email.html"}', subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}', to: '123456@qq.com'
                }
        }
}
3、到SonarQube的UI界面查看审查结果

在这里插入图片描述

以上就是 SonaQube 代码审查 的操作,主要针对飞流水线和流水线的操作

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值