暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Jenkins+SonarQube实现代码审查

风雪留客 2020-09-05
730

一. SonarQube介绍

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

二. SonarQube环境要求:

软件版本
JDK1.8
MySQL5.7

三. 安装SonarQube:

1. 安装依赖

#安装jdk:
yum install java-1.8.0-openjdk* -y
#安装MySQL可以查看我的另一篇博文:
https://blog.csdn.net/fengxueliuke/article/details/105958632
复制

2. 安装sonarqube:

此处以sonarqube-6.7.4举例,当然你也可以通过下面的链接来下载不同的版本.
下载地址:https://www.sonarqube.org/downloads/

3. 解压sonar,并设置权限:

#因为下载的包以zip结尾,故我们需要zip工具
yum install unzip
#解压到/usr/local目录 -d 指定目录
unzip sonarqube-6.7.4.zip -d /usr/local/
#创建sonar用户,必须sonar用于启动,否则报错
useradd sonarqube
#更改sonar目录及文件权限
chown -R sonarqube. /usr/local/sonarqube-6.7.4
复制

4. 创建sonarqube数据库,用于存放代码审查记录:

5. 修改sonar配置文件:

vi /usr/local/sonarqube-6.7.4/conf/sonar.properties
#修改内容如下:
#数据库用户名
sonar.jdbc.username=root
#数据库密码
sonar.jdbc.password=@Abcd1234
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#修改端口
sonar.web.port=9000
复制

6. 启动sonar:

cd /usr/local/sonarqube-6.7.4
#切换到sonarqube用户来启动,不然会失败.
su sonarqube ./bin/linux-x86-64/sonar.sh start
#查看状态
su sonarqube ./bin/linux-x86-64/sonar.sh status
#停止
su sonarqube ./bin/linux-x86-64/sonar.sh stop
#查看日志
tail -f logs/sonar.log
复制

7. 测试:

访问地址: http://{IP}:9000

看到下面的界面代表安装并启动成功.

8. 登陆:

admin/admin

9. 创建token:

输入token名称:

10. 记录token:

  1. 33368386e5e38b1782918243a20729db95cd3ab2

复制

11. 配置代理:

#如果你需要访问下载插件,恰好你懂的如何加速访问国际互联网,可进行下面配置:
vim /usr/local/sonarqube-6.7.4/conf/sonar.properties
#放开此配置:
sonar.updatecenter.activate=true
# 配置代理服务器及端口:
http.proxyHost=192.168.31.150
http.proxyPort=1080
复制

12. 安装汉化插件:

因我的版本不匹配,此处不做演示:

四. Jenkins+SonarQube代码审查之前期准备:

1. 安装SonarQube Scanner插件

2. 添加SonarQube凭证:

3. 安装SonarQube Scanner:

在Global Tool Configuration菜单中进行安装:

4. 进行SonarQube配置:

Manage Jenkins->Configure System->SonarQube servers:

5. SonaQube关闭审查结果上传到SCM功能

五. Jenkins+SonarQube代码审查实战:

1. 在项目添加SonaQube代码审查(非流水线项目)

⑴. 修改自由风格项目:

⑵. 配置Execute SonarQube Scanner:

添加构建步骤:

# 给需要代码审查的项目取一个唯一的名称
sonar.projectKey=web-demo-freestyle-project
#SonarQube UI中显示的名称和版本,必填.
sonar.projectName=web-demo-freestyle-project
sonar.projectVersion=1.0
#需要扫描代码的路径,点代表当前项目的所有内容 当然你也可以指定目录,如:/src/main/**
sonar.sources=.
#排除扫描的目录
sonar.exclusions=**/test/**,**/target/**
#jdk版本
sonar.java.source=1.8
sonar.java.target=1.8
#源代码的编码
sonar.sourceEncoding=UTF-8
复制
⑶. 修改Jenkinsfile,加入SonarQube代码审查阶段:

⑷. 查看控制台输出:

我们可以从控制台看到,代码审查已经成功了.

⑸. 查看代码审查记录:

⑹. 查看代码审查详情:

2. 在项目添加SonaQube代码审查(流水线项目):

⑴. 项目根目录下,创建sonar-project.properties文件:
sonar.projectKey=web-demo-freestyle-project1
#SonarQube UI中显示的名称和版本,必填.
sonar.projectName=web-demo-freestyle-project1
sonar.projectVersion=1.0
#需要扫描代码的路径,点代表当前项目的所有内容 当然你也可以指定目录,如:/src/main/**
sonar.sources=.
#排除扫描的目录
sonar.exclusions=**/test/**,**/target/**
#jdk版本
sonar.java.source=1.8
sonar.java.target=1.8
#源代码的编码
sonar.sourceEncoding=UTF-8
复制
⑵. 修改Jenkinsfile脚本文件,增加代码审查脚本:
pipeline {
agent any




stages {
stage('拉取代码') {
steps {
checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'ef0f4ce0-c68a-4607-9e25-21c38c50442f', url: '此处填写你的git地址']]])
echo '拉取代码成功'
}




}




stage('代码审查') {
steps {




script {
//引入SonarQube Scanner工具,在下图图一定义
scannerHome = tool 'SonarQube'
}
//引入SonarQube的环境,在下图图二定义
withSonarQubeEnv('SonarQube') {
//执行代码审查
sh "${scannerHome}/bin/sonar-scanner"
}
echo '拉取代码成功'
}




}
stage('构建项目') {
steps {
sh 'mvn clean package'
echo '构建项目成功'
}




}
stage('项目部署') {
steps {
deploy adapters: [tomcat8(credentialsId: '40de4b9b-71f8-4514-8694-2307daa9963f', path: '', url: 'http://192.168.31.101:8080')], contextPath: null, war: 'target/*.war'
echo '项目部署成功'
}




}
}
post {
always {
emailext(
subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
body: '${FILE,path="email.html"}',
to: '1805222511@qq.com'
)
}
}
}
复制

脚本中引入的SonarQube Scanner工具定义位置

脚本中引入的SonarQube环境定义位置

⑶. 推送代码:

⑷. 查看构建:

⑸.查看代码审查结果:


文章转载自风雪留客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论