当前位置: 代码迷 >> 综合 >> Jenkins - sonarqube 代码审查
  详细解决方案

Jenkins - sonarqube 代码审查

热度:43   发布时间:2024-01-31 04:52:14.0

Jenkins - SonarQube 代码审查

    • 一、安装部署 SonarQube
      • 1、全部搭建在 jenkins 主机,环境要求
        • 安装 JDK1.8
        • 安装 Mysql,并创建 SonarQube 数据库、用户
        • 安装 SonarQube
      • 2、修改 sonar 配置文件
      • 3、修改 ElasticSearch 所需要的文件描述符 、虚拟内存
      • 4、启动 sonarQube
    • 二、 实现代码审查
      • 1、访问 sonar
      • 2、生成一个 token 编码,token编码名字自定义
      • 3、jenkins 安装插件,设置 sonarQube
    • 三、非流水线项目代码审查
      • 1、在 jenkins Freestyle 自由项目中 配置 sonarQube
      • 2、构建任务,查看 sonar 代码分析
    • 四、流水线代码审查
      • 1、将扫描脚本,添加到 Gitlab 项目根目录当中
      • 2、设置 Jenkinsfile 流水线


SonarQube 是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。
目前支持 java,C,C++,python,SQL,Java 等二十几种编程语言的代码质量管理与检测。

官网:https://www.sonarqube.org/


一、安装部署 SonarQube


1、全部搭建在 jenkins 主机,环境要求

软件 服务器 版本
JDK 192.168.168.13 1.8
MySQL 192.168.168.13 5.7.29
SonarQube 192.168.168.13 7.8(必须是7.8版本)

安装 JDK1.8

[root@localhost ~]# tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/src
[root@localhost ~]# mv /usr/src/jdk1.8.0_201/ /usr/local/java 
[root@localhost ~]# echo 'export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin' >> /etc/profile
[root@localhost ~]# rm -rf /usr/bin/java
[root@localhost ~]# source /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

安装 Mysql,并创建 SonarQube 数据库、用户

安装步骤省略…

mysql> create database sonar;
mysql> grant all on *.* to 'sonar'@'192.168.168.%' identified by '123.com';

安装 SonarQube

下载地址:https://www.sonarqube.org/success-download-community-edition/

[root@jenkins ~]# unzip sonarqube-8.4.1.35646.zip 
[root@jenkins ~]# useradd sonar
[root@jenkins ~]# chown -R sonar:sonar /usr/local/sonar
[root@jenkins ~]# cd /usr/local/sonar/



2、修改 sonar 配置文件

vim /usr/local/sonar/conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=123.comsonar.jdbc.url=jdbc:mysql://192.168.168.13:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false#sonar.web.port=9000 指定 sonar-web 页面访问端口



3、修改 ElasticSearch 所需要的文件描述符 、虚拟内存

ES 要求系统文件描述符 > 65535
#软限制文件数 soft nofile 
[root@node1 ~]# echo '* soft nofile 655360' >> /etc/security/limits.conf
#硬限制文件数 
[root@node1 ~]# echo '* hard nofile 655360' >> /etc/security/limits.conf#软限制用户可用进程数 soft nproc 
[root@node1 ~]# echo '* soft nproc 2048' >> /etc/security/limits.conf
#硬限制用户可用进程数 hard nproc
[root@node1 ~]# echo '* hard nproc 4096' >> /etc/security/limits.conf#JVM能够使用的最大线程数
[root@node1 ~]# echo 'vm.max_map_count=655360' >> /etc/sysctl.conf
[root@node1 ~]# sysctl -p
vm.max_map_count = 655360#root 用户下直接生效 ulimit
echo 'root soft nofile 655360 root hard nofile 655360 root soft nproc 655360 root hard nproc 655360 ' >> /etc/security/limits.conf



4、启动 sonarQube

[sonar@jenkins ~]# useradd sonar
[sonar@jenkins ~]# passwd sonar
[sonar@jenkins ~]# su sonar
[sonar@jenkins sonar]$ cd /usr/local/sonar/
[sonar@jenkins sonar]$ ./bin/linux-x86-64/sonar.sh start 
[sonar@jenkins sonar]$ ./bin/linux-x86-64/sonar.sh status
[sonar@jenkins sonar]$ netstat -anpt 
tcp6       0      0 :::9000                 :::*                    LISTEN      7775/java           
tcp6       0      0 127.0.0.1:9001          :::*                    LISTEN      7683/java  



二、 实现代码审查

1、访问 sonar

http://192.168.168.13:9000/默认用户名 admin,密码 admin

在这里插入图片描述

2、生成一个 token 编码,token编码名字自定义

8147d9493f2950690dc5fdcee0c79c47fa94a8fe

在这里插入图片描述

3、jenkins 安装插件,设置 sonarQube

在这里插入图片描述

设置全局配置

在这里插入图片描述

设置服务配置
在这里插入图片描述
在这里插入图片描述

全局工具名:sonar-Scanner

sonar服务名:soarqube

这两个配置的 名字非常重要,需要在 sonar 扫描脚本中引用。



三、非流水线项目代码审查

1、在 jenkins Freestyle 自由项目中 配置 sonarQube

构建:

在这里插入图片描述

审查脚本

### 注意大小写 sonar.projectKey=web_demo_freestyle
sonar.projectName=web_demo_freestyle
sonar.projectVersion=1.0#扫描路径 “.”代表全部内容
sonar.sources=/src/main/*
#排除扫描路径
sonar.exclusions=**/test/**,**/target/**sonar.java.source=1.8
sonar.java.target=1.8sonar.sourceEncoding=UTF-8

2、构建任务,查看 sonar 代码分析

构建成功信息如下:

  • ? 将 扫描结果,呈现给 http://192.168.168.13:9000/dashboard/web_demo
  • ? 耗时:4.392s ;实际使用18M内存

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述



四、流水线代码审查

1、将扫描脚本,添加到 Gitlab 项目根目录当中

命名为:sonar-project.properties(名称固定)

### 注意大小写 sonar.projectKey=web_demo_pipeline
sonar.projectName=web_demo_pipeline
sonar.projectVersion=1.0#扫描路径 “.”代表全部内容
sonar.sources=.
#排除扫描路径
sonar.exclusions=**/test/**,**/target/**sonar.java.source=1.8
sonar.java.target=1.8sonar.sourceEncoding=UTF-8

2、设置 Jenkinsfile 流水线

代码扫描片段:

stage('code checking') {				// 检索代码步骤steps {script {				//引入 sonar-Scanner 工具,全局配置下设置的名字scannerHome = tool 'sonar-Scanner'}								withSonarQubeEnv('sonarqube') {		//引入 sonarqube 服务名字,jenkins服务配置 sh "${scannerHome}/bin/sonar-scanner"	//sonar-scanner 触发代码扫描命令}}
}

完整脚本:

pipeline {agent anystages {stage('pull code') {steps {checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'gitlab-manven', url: 'git@192.168.168.4:cheliang/test2.git']]])}}stage('code checking') {steps {script {scannerHome = tool 'sonar-Scanner'}								withSonarQubeEnv('sonarqube') { sh "${scannerHome}/bin/sonar-scanner"}}}stage('build project') {steps {sh label: '', script: '''echo "======= 开始打包 ========"source /etc/profilemvn clean packageecho "======= 打包结束、开始部署 ======="'''}}stage('publish project') {steps {deploy adapters: [tomcat9(credentialsId: 'b73170b6-fa08-4350-9d35-530b1eb19b75', path: '', url: 'http://192.168.168.5:8080/')], contextPath: null, war: 'target/*.war'}}}post {always {emailext (subject: '\'构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}\'',body: '${FILE,path="email.html"}',to: 'shm1136265636@163.com')}}
}

在这里插入图片描述

构建任务:
在这里插入图片描述
在这里插入图片描述