• Jenkins+SonarQube代码审查



    引言

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

    • 官网

    • 环境要求:

    软件服务器版本
    JDK192.168.18.10111
    PostgreSQL192.168.18.1015.7
    SonarQube192.168.18.1018.6.0

    安装PostgreSQL

    • Docker安装:
    # 用户名是 postgres  ,密码是123456
    docker run --name postgres -v dv_pgdata:/var/lib/postgresql/data --restart=always -e POSTGRES_PASSWORD=123456 -p 5432:5432 -d postgres:12.1
    
    • 1
    • 2

    安装SonarQube

    • 在PostgreSQL中新建sonar数据库:
    CREATE DATABASE sonar;
    
    • 1
    • 下载SonarQube
    wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.6.0.39681.zip
    
    • 1
    • 解压sonar:
    unzip -d /usr/local/ sonarqube-8.6.0.39681.zip
    
    • 1
    cd /usr/local
    
    • 1
    mv sonarqube-8.6.0.39681 sonarqube-8.6.0
    
    • 1
    • 创建用户,用于设置权限:
    # 创建sonar用户,sonar不能用root启动,否则报错
    useradd sonar
    
    • 1
    • 2
    passwd sonar
    
    • 1
    chown -R sonar /usr/local/sonarqube-8.6.0
    
    • 1
    • 修改sonar的配置文件:
    vim /usr/local/sonarqube-8.6.0/conf/sonar.properties
    
    • 1
    # 内容如下
    sonar.jdbc.username=postgres 
    sonar.jdbc.password=123456
    sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar
    
    • 1
    • 2
    • 3
    • 4
    • sonar默认自带了ES,所以需要修改配置,防止启动报错:
    vim /etc/security/limits.conf
    
    • 1
    # 追加内容
    * soft nofile 65536
    * hard nofile 65536
    * soft nproc 4096
    * hard nproc 4096
    
    • 1
    • 2
    • 3
    • 4
    • 5
    vim /etc/security/limits.d/90-nproc.conf
    
    • 1
    # 追加内容
    * soft nproc 4096
    
    • 1
    • 2
    vim /etc/sysctl.conf
    
    • 1
    # 追加内容
    vm.max_map_count=655360
    
    • 1
    • 2
    sysctl -p
    
    • 1
    reboot
    
    • 1

    • 启动sonar(sonar的默认端口是9000):
    cd /usr/local/sonarqube-8.6.0/
    
    • 1
    # 启动
    su sonar ./bin/linux-x86-64/sonar.sh start
    
    • 1
    • 2
    # 查看状态
    su sonar ./bin/linux-x86-64/sonar.sh status
    
    • 1
    • 2
    # 停止
    su sonar ./bin/linux-x86-64/sonar.sh stop
    
    • 1
    • 2
    # 查看日志
    tail -f logs/sonarxxx.logs
    
    • 1
    • 2
    • 访问sonar:http://192.168.18.101:9000。
      在这里插入图片描述
    • 修改sonar的默认密码:

    在这里插入图片描述

    • 安装中文插件:

    在这里插入图片描述

    如果出现“Error while downloading plugin ‘l10nzhtw’ with version ‘1.0’. No compatible plugin found.”错误,那说明版本不兼容,可到官网查找对应版本的插件放到…/…/extensions/plugins目录下,重新启动sonar服务【使用命令…/…/sonar.sh start 也可以通过页面操作“配置->系统->重启服务器”】,即可生效。但如果安装的插件比当前版本低的话,会出现部分显示还是英文。

    cd /usr/local/sonarqube-8.6.0/extensions/plugins
    
    • 1

    • 生成令牌(需要将生成的令牌复制下来):

    在这里插入图片描述


    实现代码审查

    概述

    在这里插入图片描述

    Jenkins安装SonarQube Scanner插件

    安装SonarQube Scanner

    ● 安装SonarQube Scanner有两种方式:

    ○ 在Linux所在的服务器上直接安装。

    ○ 通过Jenkins帮我们自动安装(本人选择这种)。

    ● Manage Jenkins–>Global Tool Configuration。

    在这里插入图片描述


    Jenkins配置Sonar Server

    • Manage Jenkins->Configure System->SonarQube servers:

    在这里插入图片描述


    非流水线项目添加SonarQube代码审查

    • 添加构建步骤:

    在这里插入图片描述

    • 配置如下:
    # must be unique in a given SonarQube instance
    sonar.projectKey=springboot2
    # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 8.6.0
    sonar.projectName=springboot2
    sonar.projectVersion=1.0
    # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
    # This property is optional if sonar.modules is set.
    sonar.sources=.
    sonar.exclusions=**/test/**,**/target/**
    sonar.java.source=11
    sonar.java.target=11
    # Encoding of the source code. Default is default system encoding
    sonar.sourceEncoding=UTF-8
    sonar.java.binaries=**target/classes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    流水线项目添加SonarQube代码审查

    • 在项目的根目录中添加sonar-project.properties文件,内容如下:
    # must be unique in a given SonarQube instance
    sonar.projectKey=springboot2
    # this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 8.6.0
    sonar.projectName=springboot2
    sonar.projectVersion=1.0
    # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
    # This property is optional if sonar.modules is set.
    sonar.sources=.
    sonar.exclusions=**/test/**,**/target/**
    sonar.java.source=11
    sonar.java.target=11
    # Encoding of the source code. Default is default system encoding
    sonar.sourceEncoding=UTF-8
    sonar.java.binaries=**target/classes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    • Jenkinsfile:
    pipeline {
        agent any
    
        stages {
            stage('拉取代码') {
                steps {
                    checkout([$class: 'GitSCM', branches: [[name: '*/${branch}']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '7d5c4945-2533-41e2-bd47-5dd97eb37f38', url: 'git@192.168.18.100:develop_group/springboot2.git']]])
                }
            }
    		stage('编译打包') {
                steps {
                    sh '''echo "开始构建"
                    mvn clean install -Dmaven.test.skip=true
                    echo "构建结束"'''
                }
            }
            stage('代码检查') {
                steps {
                    script {
                       // 引入SonarQubeScanner工具
                       scannerHome = tool 'sonarqube-scanner'
                    }
                    // 引入了 SonarQube服务器的环境
                    withSonarQubeEnv('sonarqube-8.6.0') {
                       sh "${scannerHome}/bin/sonar-scanner"
                    }
                }
            }
    		stage('远程部署') {
                steps {
                    sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.18.102', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /usr/local
    chmod 777 *.sh
    ./stop.sh
    ./start.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: 'target', sourceFiles: 'target/*.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                }
            }
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
  • 相关阅读:
    阿尔兹海默病智能诊断
    Flink-看完就会flink基础API
    Win10:禁用 Automatic Restart on System Failure
    Linux中磁盘管理
    【Segment Anything Model】SAM做多类别分割,医疗语义分割
    拼多多API接口的使用方针如下:
    论文阅读-Dr.Deep_基于医疗特征上下文学习的患者健康状态可解释评估
    MySQL 索引分类
    sql concat()函数
    【绝对干货】java面试笔试题及答案
  • 原文地址:https://blog.csdn.net/m0_53157173/article/details/126589567