sonarqube使用

一、介绍


​ sonar是一款静态代码质量分析工具,支持包括JAVA、JS、CSS等20多种语言,能够集成到IDE、Jenkins等服务中,方便查看代码质量分析报告。

二、安装


(一)、环境准备

centos 7
docker 19.0 +
docker-compose 1.26 +

(二)、配置docker-compose文件

version: "3"

services:
  sonarqube:
    image: sonarqube:7.4-community
    ports:
      - "9000:9000"
    networks:
      - sonarnet
    environment:
      - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
    volumes:
      - sonarqube_conf:/opt/sonarqube/conf
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
  db:
    image: postgres:11.1
    networks:
      - sonarnet
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
    volumes:
      - postgresql_data:/var/lib/postgresql/data
networks:
  sonarnet:
    driver: bridge
volumes:
  sonarqube_conf:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_bundled-plugins:
  postgresql_data:

(三)、启动

docker-compose up -d

(四)、配置插件

  1. 查看插件目录

    # 查看插件目录命令
    docker volume inspect sonarqube_sonarqube_extensions
    # 返回
    [
        {
            "CreatedAt": "2020-06-28T11:21:57+08:00",
            "Driver": "local",
            "Labels": {
                "com.docker.compose.project": "sonarqube",
                "com.docker.compose.version": "1.24.1",
                "com.docker.compose.volume": "sonarqube_extensions"
            },
            "Mountpoint": "/data/docker/volumes/sonarqube_sonarqube_extensions/_data",
            "Name": "sonarqube_sonarqube_extensions",
            "Options": null,
            "Scope": "local"
        }
    ]
    # Mountpoint下目录
    /data/docker/volumes/sonarqube_sonarqube_extensions/_data/plugins
    
  2. 上传插件

    # plugins
    .
    ├── README.txt
    ├── sonar-csharp-plugin-7.7.0.7192.jar
    ├── sonar-css-plugin-1.0.2.611.jar
    ├── sonar-flex-plugin-2.4.0.1222.jar
    ├── sonar-go-plugin-1.1.0.1612.jar
    ├── sonar-jacoco-plugin-1.0.1.143.jar
    ├── sonar-java-plugin-5.8.0.15699.jar
    ├── sonar-javascript-plugin-5.0.0.6962.jar
    ├── sonar-kotlin-plugin-1.2.1.2009.jar
    ├── sonar-l10n-zh-plugin-1.19.jar
    ├── sonar-ldap-plugin-2.2.0.608.jar
    ├── sonar-php-plugin-2.14.0.3569.jar
    ├── sonar-python-plugin-1.10.0.2131.jar
    ├── sonar-ruby-plugin-1.2.1.2009.jar
    ├── sonar-scm-git-plugin-1.6.0.1349.jar
    ├── sonar-scm-svn-plugin-1.9.0.1295.jar
    ├── sonar-typescript-plugin-1.8.0.3332.jar
    ├── sonar-vbnet-plugin-7.7.0.7192.jar
    └── sonar-xml-plugin-1.5.1.1452.jar
    

(五)、配置sonar.properties

  1. 查看配置文件目录

    # 查看配置文件目录
    docker volume inspect sonarqube_sonarqube_conf
    # 返回信息
    [
        {
            "CreatedAt": "2020-06-28T13:37:30+08:00",
            "Driver": "local",
            "Labels": {
                "com.docker.compose.project": "sonarqube",
                "com.docker.compose.version": "1.24.1",
                "com.docker.compose.volume": "sonarqube_conf"
            },
            "Mountpoint": "/data/docker/volumes/sonarqube_sonarqube_conf/_data",
            "Name": "sonarqube_sonarqube_conf",
            "Options": null,
            "Scope": "local"
        }
    ]
    # Mountpoint下目录
    /data/docker/volumes/sonarqube_sonarqube_conf/_data
    
  2. 配置文件

    vim /data/docker/volumes/sonarqube_sonarqube_conf/_data/sonar.properties
    
    sonar.web.context=/sonar
    sonar.web.port=9000
    

(六)、web

  1. web访问

    http://localhost:9000/sonar
    

三、集成Jenkins

(一)、webhook配置

# 检查结果通知
配置- 配置 – webhooks
# 创建
# 名称
jenkins
# URL
http://jenkins:8080/sonarqube-webhook/
#备注:
#Jenkins服务器地址

(二)、jenkins配置

  1. 插件安装

    SonarQube Scanner插件安装
    
  2. 系统配置

    # 系统管理 – 系统配置 – SonarQube servers
    # Name 
    sonar
    # Server URL
    http://sonar:9000/sonar/
    # 备注: sonar服务器地址
    # Server authentication token
    选择sonar认证
    

(三)、pipeline编写

  1. maven-global-settings配置

    # 系统设置-文件管理
    配置全局maven源
    # 文件ID
    maven-global-settings
    
  2. 流水线步骤

    stage('Sonar阶段') {
    	steps{
    		configFileProvider([configFile(fileId: 'maven-global-settings', variable: 'MAVEN_GLOBAL_ENV')]) {
    			withSonarQubeEnv('sonar') {
    				echo "开始进行代码审计"
    				sh """mvn -s $MAVEN_GLOBAL_ENV sonar:sonar \
    					-Dsonar.projectKey=${APPLICATION_NAME} \
    					-Dsonar.projectName=${APPLICATION_NAME} \
    					-Dsonar.java.coveragePlugin=jacoco \
    					-Dsonar.surefire.reportsPath=target/surefire-reports \
    					-Dsonar.analysis.mode= \
    					-Dsonar.java.binaries=target/sonar
    				"""
    			}
    			script {
    				//设置超时时间1分钟
    				timeout(1) {
    					//利用sonar webhook功能通知pipeline代码检测结果,未通过质量阈,pipeline将会fail
    					def qg = waitForQualityGate('sonar')
    					if (qg.status != 'OK') {
    						error "未通过Sonarqube的代码质量阈检查,请及时修改!failure: ${qg.status}"
    					}
    				}
    			}
    		}
    	}
    }
    

四、管理


(一)、质量阈配置

  1. 新增

    # 质量阈 – 创建
    # 名称
    test
    # 条件 度量
    Bugs > 0
    # 设为默认
    

(二)、阿里p3c-pmd规则

  1. 上传插件

    # https://github.com/jensgerdes/sonar-pmd/releases
    sonar-pmd-plugin-3.3.0.jar
    
  2. 激活规则

    # 新增质量配置
    # 激活p3c规则
    # 应用规则
    # 设置成默认配置
    
posted @ 2021-01-25 09:28  qms19  阅读(332)  评论(0编辑  收藏  举报