博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jenkins - sonarqube 代码审查
阅读量:4069 次
发布时间:2019-05-25

本文共 5356 字,大约阅读时间需要 17 分钟。

Jenkins - SonarQube 代码审查

SonarQube 是一个用于管理代码质量的开放平台,可以快速的定位代码中潜在的或者明显的错误。

目前支持 java,C,C++,python,SQL,Java 等二十几种编程语言的代码质量管理与检测。

官网

一、安装部署 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/javaexport JRE_HOME=/usr/local/java/jreexport CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/libexport 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 -versionjava 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

下载地址:

[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=sonarsonar.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 -pvm.max_map_count = 655360#root 用户下直接生效 ulimitecho 'root soft nofile 655360root hard nofile 655360root  soft nproc 655360root  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_freestylesonar.projectName=web_demo_freestylesonar.projectVersion=1.0#扫描路径 “.”代表全部内容sonar.sources=/src/main/*#排除扫描路径sonar.exclusions=**/test/**,**/target/**sonar.java.source=1.8sonar.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_pipelinesonar.projectName=web_demo_pipelinesonar.projectVersion=1.0#扫描路径 “.”代表全部内容sonar.sources=.#排除扫描路径sonar.exclusions=**/test/**,**/target/**sonar.java.source=1.8sonar.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 any    stages {        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/profile                mvn clean package                echo "======= 打包结束、开始部署 ======="'''            }        }        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'            )        }    }}

在这里插入图片描述

构建任务:

在这里插入图片描述
在这里插入图片描述

转载地址:http://ryrji.baihongyu.com/

你可能感兴趣的文章
【spring】spring boot多数据源配置(方式二)
查看>>
【RPC】一步一步实现基于netty+zookeeper的RPC框架(一)
查看>>
【RPC】一步一步实现基于netty+zookeeper的RPC框架(二)
查看>>
【RPC】一步一步实现基于netty+zookeeper的RPC框架(三)
查看>>
【RPC】一步一步实现基于netty+zookeeper的RPC框架(四)
查看>>
【RPC】一步一步实现基于netty+zookeeper的RPC框架(五)
查看>>
【RPC】一步一步实现基于netty+zookeeper的RPC框架(六)
查看>>
生成支持分布式部署的唯一id代码实现
查看>>
支持分表的ORM框架实现
查看>>
jquery easyui datagrid subgrid edit
查看>>
java集合(ArrayList、vector、HashMap、HashTable)源码剖析
查看>>
补充另一版ArrayList的初始化过程
查看>>
java接口不能实例化原因浅谈
查看>>
Https加密及攻防
查看>>
Java生成随机不重复推广码邀请码
查看>>
Java8 Lambda表达式介绍
查看>>
Java8 stream流介绍
查看>>
Java多线程之synchronized及死锁编写
查看>>
Java NIO源码剖析及使用实例(一):Buffer
查看>>
[swift实战入门]手把手教你编写2048(一)
查看>>