# sonarqube 信息 * host:http://121.204.249.37:9100 * token:`8c31d6b3a1b0680b07eb009d68398bc8495c74f9` * 帐号:sonar-develop * 密码:Sonar@develop123 # 前提说明: 版本支持参考:[8.9版本](https://docs.sonarsource.com/sonarqube-server/8.9/requirements/prerequisites-and-overview/) 1. sonarqube对jdk有版本要求 ***说明:最新版本sonarqube 10.8要求jdk17,如果项目使用jdk1.8,最高版本只能是sonarqube 8.9。*** 2. sonarqube对数据库也有要求,高版本只支持postgreSQL,SqlServer,Oracle,同时对版本也有要求; 3. maven的sonarscanner插件,新旧版本支持的属性也有些不同,比如:sonnar.login和password在新版本已过期,需要使用sonar.token等 [最新版本属性](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/analysis-parameters/) [8.9版本属性](https://docs.sonarsource.com/sonarqube-server/8.9/analyzing-source-code/analysis-parameters/) ### 1. docker安装 根据需要安装对应的版本,官方安装文档参考: [8.9版本](https://docs.sonarsource.com/sonarqube-server/8.9/setup-and-upgrade/install-the-server/) [最新版本](https://docs.sonarsource.com/sonarqube-server/latest/setup-and-upgrade/install-the-server/installing-sonarqube-from-docker/) **docker-compose.yml配置文件如下:** ``` version: "3" services: sonarqube: image: sonarqube:8.9.10-community depends_on: - postgres environment: SONAR_JDBC_URL: jdbc:postgresql://postgres:5432/sonar SONAR_JDBC_USERNAME: sonar SONAR_JDBC_PASSWORD: sonar volumes: #注意:需要设置/data/module/sonarqube目录权限755 - /data/module/sonarqube/data:/opt/sonarqube/data - /data/module/sonarqube/extensions:/opt/sonarqube/extensions - /data/module/sonarqube/logs:/opt/sonarqube/logs ports: - "9000:9000" postgres: image: postgres:15 environment: POSTGRES_USER: sonar POSTGRES_PASSWORD: sonar POSTGRES_DB: sonar volumes: - /data/module/postgresql:/var/lib/postgresql - /data/module/postgresql/data:/var/lib/postgresql/data ``` ### 2. sonarqube的插件安装 - 插件安装也需要对照版本 [8.9版本](https://docs.sonarsource.com/sonarqube-server/8.9/instance-administration/plugin-version-matrix/) [最新版本](https://docs.sonarsource.com/sonarqube-server/latest/setup-and-upgrade/plugins/plugin-version-matrix/) - 离线安装plugins 从版本对照找到适合的插件版本下载jar包,放入`$SONAR_HOME/extensions/plugins`目录即可, 推荐安装的插件有: - Chinese Pack - checkstyle - p3c-pmd【阿里代码规约,需要自己下载源码编译,[github地址](https://github.com/caowenliang/sonar-pmd-p3c) 】 - 代码规则配置:在p3c-pmd的基础上,添加sonar默认的一些规则; - 质量阈自定义配置【否则都是成功】。 ### 3. jenkins支持sonarqube [8.9版本](https://docs.sonarsource.com/sonarqube-server/8.9/analyzing-source-code/scanners/sonarscanner-for-jenkins/) [最新版本](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/scanners/jenkins-extension-sonarqube/) - 插件的方法使用说明和环境变量[参考地址](https://www.jenkins.io/doc/pipeline/steps/sonar/) - 如果jenkins插件市场搜索到的SonarQube Scanner版本不对照,可以从该链接地址 [下载](https://plugins.jenkins.io/sonar/releases/) 手动安装 1. 在SonarQube中(配置->网络调用)创建jenkins的webhook地址: `http://[jenkins_url]/sonarqube-webhook/` 2. jenkisfile写法参考: ``` node { stage('SonarQube analysis') { withSonarQubeEnv('My SonarQube Server') { sh 'mvn clean package sonar:sonar' } // submitted SonarQube taskId is automatically attached to the pipeline context } // No need to occupy a node stage("Quality Gate"){ timeout(time: 1, unit: 'HOURS') { // Just in case something goes wrong, pipeline will be killed after a timeout def qg = waitForQualityGate() // Reuse taskId previously collected by withSonarQubeEnv if (qg.status != 'OK') { error "Pipeline aborted due to quality gate failure: ${qg.status}" } } } 或者 stage("Quality Gate") { steps { timeout(time: 1, unit: 'HOURS') { // Parameter indicates whether to set pipeline to UNSTABLE if Quality Gate fails // true = set pipeline to UNSTABLE, false = don't waitForQualityGate abortPipeline: true } } } } ``` ### 4. ~~【后端开发】idea添加sonar插件~~ 1. 插件市场名字:SonarQube for IDE, 别名:SonarLint [插件官网地址](https://plugins.jetbrains.com/plugin/7973-sonarqube-for-ide) 配置了远程SonarQube的hostUrl和token以后可以使用。 **注意:** 下载sonarLint的版本要与sonarQube服务端版本(版本号:8.9)匹配,否则使用不了。 2. 插件的作用: - 在代码开发过程中,检测到代码质量问题, - git提交代码之前sonarLint会提示代码commit的代码有哪些问题。 【目的】:做到提前修复,避免在jenkins部署时候出现一堆需要修改的代码耽误部署时间。 > (1)该插件只能检测sonarqube默认的规则,不能检测阿里巴巴的基于pmd的p3c规则, 原因:https://blog.csdn.net/weixin_42617348/article/details/81170166; > (2)开发过程中,要通过maven的sonar插件规则校验。 ### ~~5. 【后端开发】sonar-maven-plugin插件安装使用~~ maven配置参考官网 [8.9版本](https://docs.sonarsource.com/sonarqube-server/8.9/analyzing-source-code/scanners/sonarscanner-for-maven/) [最新版本](https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/scanners/sonarscanner-for-maven/) 项目模块使用方式: * pom.xml升级parent依赖,com.platomix:platomix-pom:1.2.2; * 执行命令`mvn clean package sonar:sonar` 或者 直接使用sonar-scanner软件扫描。 ### 6. 【后端开发】maven-pmd-plugin插件安装使用 1. 每个项目的根目录下放置[ali-pmd.xml](ali-pmd.xml)文件; 2. pom.xml升级parent依赖,com.platomix:platomix-pom:1.2.4; 3. 开发过程中,通过idea的Alibaba Java Code Guidelines插件扫描,然后通过clean package时,会通过maven-pmd-plugin插件检测代码(检测规则与插件差不多,比插件会少一些)。 > 问:为什么JAVA后端不使用sonar插件结合SonarQube服务做静态代码检测? > 答:主要原因是想使用ali-p3c代码校验规则,导致在开发过程中无法快捷方便的检测,详细情况如下: > (1)SonarQube支持基于pmd的p3c代码规则,但是IDEA插件SonarLint不支持【仅支持SonarQube的默认规则,原因:https://blog.csdn.net/weixin_42617348/article/details/81170166 】,导致开发过程中不能便捷检测; > (2)maven-sonar-plugin支持检测p3c代码规则,不过每次都需要执行sonar:sonar命令,返回一个报告地址,需要去SonarQube服务页面上查看检测结果; > (3)jenkins通过maven-sonar-plugin插件可以集成sonar静态代码检测,并且可以阻塞获取检测结果,成功:进入下一个节点;失败:停止部署发版; > (4)IDEA的Alibaba Java Code Guidelines插件是专门检测p3c代码规则的,检测规则在ali-pmd.xml文件中(做了一些修改,去掉了一些规则,比如:UndefineMagicConstantRule); > (5)maven-pmd-plugin通过ali-pmd.xml可以与IDEA的Alibaba Java Code Guidelines插件保持相对一致的代码检测规则,这样在开发和发版过程都可以方便快捷的解决代码质量问题。 > **综上所述:最后选择使用maven-pmd-plugin插件配合自定义的代码检测规则ali-pmd.xml来做静态代码检测。** ### 7. 【前端开发】vscode添加sonar插件 1. 插件市场名字:SonarQube for IDE: Visual Studio Code (formerly SonarLint) [插件官网地址](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarlint-vscode) **注意:** 下载sonarLint的版本要与sonarQube服务端版本(版本号:8.9)匹配,否则使用不了,插件作用参考4。 ### 8. 【前端开发】sonar-scanner扫描 1. 安装sonnar-scanner软件包 [下载地址](https://docs.sonarsource.com/sonarqube-server/8.9/analyzing-source-code/scanners/sonarscanner/) 2. 配置环境变量 ``` SONAR_SCANNER_HOME=/path/to/sonar-scanner-[version] PATH=$SONAR_SCANNER_HOME/bin:$PATH ``` 3. 在项目的根目录下创建sonar-project.properties文件,内容如下【注意:修改projectName为项目名称】: ``` #项目标识【必需】- 自行修改projectName sonar.projectKey=com.platomix:[projectName] #项目名称【必需】- 自行修改projectName sonar.projectName=[projectName] # 指定 SonarQube 服务器地址 sonar.host.url=http://121.204.249.37:9100 #项目版本号【可选】 #sonar.projectVersion=1.0 sonar.verbose=true sonar.login=8c31d6b3a1b0680b07eb009d68398bc8495c74f9 # 需要分析的源码目录 sonar.sources=src #源码的默认编码 sonar.sourceEncoding=UTF-8 #忽略文件 sonar.exclusions=node_modules\**\* ``` 4. 在package.json中添加配置: ``` { ... scripts: { //根据项目的情况,后面添加" & sonar-scanner" "eslint": "eslint & sonar-scanner" } } ```