四、Jenkins+SonarQube代码审查

一、SonarQube简介

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

二、Docker部署SonarQube

1.下载镜像

docker pull postgres:latest
docker pull sonarqube

2.创建挂载目录

#用于postgres的挂载目录
mkdir -p /data/postgres/postgresql
mkdir -p /data/postgres/data

mkdir -p /data/sonarqube/logs
mkdir -p /data/sonarqube/conf
mkdir -p /data/sonarqube/data
mkdir -p /data/sonarqube/extensions

# 授权(不授权会导致启动失败)
chmod -R 777 /data/sonarqube

3.运行容器

  • 创建网络,通过容器名称就可以互相访问
docker network create sonarqube
  • 先运行postgres
docker run --name postgres -d -p 5432:5432 --net sonarqube \
-v /data/postgres/postgresql:/var/lib/postgresql \
-v /data/postgres/data:/var/lib/postgresql/data \
-v /etc/localtime:/etc/localtime:ro \
-e POSTGRES_USER=sonar \
-e POSTGRES_PASSWORD=sonar \
-e POSTGRES_DB=sonar \
-e TZ=Asia/Shanghai \
--restart always \
--privileged=true \
--network-alias postgres \
postgres:latest
  • 运行sonarqube(这里启动会比较久,可以使用docker logs -f sonarqube查看)
docker run -d --name sonarqube -p 9090:9000 \
-e ALLOW_EMPTY_PASSWORD=yes \
-e SONARQUBE_DATABASE_USER=sonar \
-e SONARQUBE_DATABASE_NAME=sonar \
-e SONARQUBE_DATABASE_PASSWORD=sonar \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://postgres:5432/sonar" \
--net sonarqube \
--privileged=true \
--restart always \
-v /data/sonarqube/logs:/opt/sonarqube/logs \
-v /data/sonarqube/conf:/opt/sonarqube/conf \
-v /data/sonarqube/data:/opt/sonarqube/data \
-v /data/sonarqube/extensions:/opt/sonarqube/extensions \
sonarqube

4.访问

访问地址:http://服务器ip:9090
默认账号密码:admin/admin

三、Jenkins+SonarQube整合

在这里插入图片描述

1.安装Sonar Scanner插件

在这里插入图片描述

2.安装Sonar Scanner软件

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

  • 配置的名称后续配置Pipeline会用到:sonar-scanner
  • 配置完不会马上下载安装,后续第一次扫描构建的时候才会下载安装。

3.获取SonarQube的token

在这里插入图片描述

4.在jenkins创建凭证

  • 将上一步在SonarQube创建的token,在jenkins凭证管理创建
    在这里插入图片描述

5.配置SonarQube服务器

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

  • 需要记住这个Name:SonarQube-Server

6.非流水线项目整合

  • 非流水项目步骤都是一样的。
  • 以自由风格项目为例
    在这里插入图片描述
    在这里插入图片描述
  • 参数解释:
    • JDK:项目的JDK版本
    • Path to project properties:项目的SonarQube的配置文件目录地址。和 Analysis properties 二选一
      • 第一种配置方式:在git的项目根目录下面创建一个配置文件(sonar-project.properties)
      • 第二种配置方式:将配置放到 Analysis properties
    • Analysis properties:放置SonarQube的配置内容

下面是SonarQube的配置内容

# must be unique in a given SonarQube instance
sonar.projectKey=web_demo_pipline
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo_pipline
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# sonar.sources:扫描的代码路径,下面代表所有代码
sonar.sources=.
# 排除某些文件夹不扫描
sonar.exclusions=**/test/**,**/target/**

# JDK的版本
sonar.java.source=1.8
sonar.java.target=1.8

# 源码编码格式
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
  • 完成以上配置,构建完会自动推送到代码审查

7.流水线项目整合

7.1 在git根目录创建SonarQube配置文件

  • 文件名称:sonar-project.properties
# must be unique in a given SonarQube instance
sonar.projectKey=web_demo_pipline
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo_pipline
sonar.projectVersion=1.0

# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# sonar.sources:扫描的代码路径,下面代表所有代码
sonar.sources=.
# 排除某些文件夹不扫描
sonar.exclusions=**/test/**,**/target/**

# JDK的版本
sonar.java.source=1.8
sonar.java.target=1.8

# 源码编码格式
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

7.2 在Pipeline脚本加入代码扫描

pipeline {
   agent any

   stages {
      stage('pull code') {
         steps {
            checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'b632ed00-fc81-43c8-a746-5aa0673b2658', url: 'git@192.168.66.100:itheima_group/web_demo.git']]])
         }
      }
      stage('code checking') {
         steps {

            script {
                 //引入SonarQubeScanner工具
                scannerHome = tool 'sonar-scanner'
            }
            //引入SonarQube的服务器环境
            withSonarQubeEnv('SonarQube-Server') {
                sh "${scannerHome}/bin/sonar-scanner"
            }
         }
      }
      stage('build project') {
         steps {
            sh 'mvn clean package'
         }
      }
      stage('publish project') {
         steps {
            deploy adapters: [tomcat8(credentialsId: 'fc23e5b7-9930-4dfb-af66-a2a576be52fb', path: '', url: 'http://192.168.66.102:8080')], contextPath: null, war: 'target/*.war'
         }
      }
   }
   post {
         always {
            emailext(
               subject: '构建通知:${PROJECT_NAME} - Build # ${BUILD_NUMBER} - ${BUILD_STATUS}!',
               body: '${FILE,path="email.html"}',
               to: 'xxxx@qq.com'
            )
         }
   }
}
  • 在Jenkins构建项目即可。
  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值