安装服务器端的sonarqube

下载地址:https://www.cnblogs.com/cxygg/p/18008738

客户端有很多种比如SonarScanner CLI,Jenkins extension for SonarQube,SonarScanner for Maven,sonarlint等

创建项目后获取token

SonarScanner CLI 的使用

SonarScanner 有linux版本

window版本下载地址

解压后修改配置文件

sonar-scanner-5.0.1.3006-windows\conf

#Configure here general information about the environment, such as SonarQube server connection details for example

#No information about specific project should appear here

#----- sonarqube服务器地址和项目token

sonar.host.url=http://192.168.100.66:9000

sonar.login=sqp_480f5126ff99c9208c21f3a3db21bb7f5e0cc23b

#----- Default source code encoding

sonar.sourceEncoding=UTF-8

把sonar-scanner-5.0.1.3006-windows\bin目录加入到环境变量path

在项目代码根目录创建当前项目的配置文件

sonar-project.properties

#项目的唯一标记

sonar.projectKey=TestExample

#项目的名字

sonar.projectName=TestExample

#项目的版本呢

sonar.projectVersion=1.0

#代码路径,.表示当前路径

sonar.sources=.

#编码

sonar.sourceEncoding=UTF-8

#代码语言

sonar.language=java

#二进制文件目录,这是要跳过的

sonar.java.binaries=target/classes

启动cmd 在 sonar-project.properties所在的目录执行 sonar-scanner开心静态代码扫描

实际上是连接到sonarqube服务器取到扫描规则,然后scanner扫描代码,扫描完成以后上传结果到soanrqube服务器。

如果啥都不配置也可以直接命令行指定参数执行

-Dsonar.token 或者-Dsonar.login=账号-Dsonar.password=密码,都能指定授权

#使用token

sonar-scanner -Dsonar.projectKey=TestExample -Dsonar.host.url=http://192.168.100.66:9000 -Dsonar.token=sqp_958bf014e49777742cc027d6fddf70cd1941ec39 -Dsonar.sources=. -Dsonar.java.binaries=.\target -Dsonar.java.source=8 -Dsonar.sourceEncoding=UTF-8

#使用账号密码登录

sonar-scanner -Dsonar.projectKey=TestExample -Dsonar.host.url=http://192.168.100.66:9000 -Dsonar.login=admin -Dsonar.password=admin123 -Dsonar.sources=. -Dsonar.java.binaries=.\target -Dsonar.java.source=8 -Dsonar.sourceEncoding=UTF-8

SonarScanner for Maven 的使用

下面的配置是 maven 的 setting.xml文件的

org.sonarsource.scanner.maven

.

.这里是你别的maven 设置

.

sonar

true

http://192.168.100.66:9000

admin

admin123

打包前检查代码

#maven 安装前执行 sonar:soane

mvn clean verify sonar:sonar install

#这里也可以添加别的参数,如果没有指定 Dsonar.projectKey 默认是maven 项目artifictId

mvn clean verify sonar:sonar -Dsonar.projectName=TestExample -Dsonar.projectKey=TestExample install

这里如果编译代码的JDK 是1.8 是运行不过的,sonar-scanner要求jdk17,但是这里 MVN 里面的环境是1.8,里面 sonar插件格式是JDK 17就会异常,即便配置环境变量 SONAR_JAVA_PATH也是不行,SONAR_JAVA_PATH在不是maven环境的时候可以用

sonar-maven-plugin(项目内maven插件)

有覆盖率要求的才选这种方式,这种方式会执行单元测试,一般要求项目运行jdk版本和sonar插件的需要的jdk版本一直。

参考地址:https://www.cnblogs.com/cxygg/p/18394187

Jenkins extension for SonarQube 的使用

用这个插件原:https://updates.jenkins.io/updates/hudson.plugins.sonar.SonarRunnerInstaller.json

安装 SonarQube Scanner插件

全局配置设置 SonarQube 的地址,账号密码(或者token)

系统配置里面添加sonarqube server地址和凭证

配置 sonar-scanner

如果是构建 自由风格选择 Execute SonarQube Scanner,设置 project文件位置(放在项目根目录下面)

如果是流水线项目

pipeline {

agent any

stages {

stage('拉取代码') {

steps {

git branch: 'main', credentialsId: '221cd873-1038-474f-9f7c-92a84bb9bcb7', url: 'http://192.168.100.66:180/octopus/Testexample.git'

echo 'Hello World'

}

}

stage('编译打包') {

steps {

sh '''export JAVA_HOME=/root/tools/jdk1.8

mvn clean install'''

echo 'maven构建完成'

}

}

stage('SonarQube code checking') {

steps{

script {

//引入SonarqubeScanner工具

//sonarqube-scanner为在jenkins中定义的工具名称

scannerHome = tool 'SonarQube Scanner'

}

//引入SonarQube服务器环境,vm66为soanrqube服务器配置的名字

withSonarQubeEnv('vm66') {

//sonarqube-scanner工具下的脚本,这里可以传参数

sh "${scannerHome}/bin/sonar-scanner"

}

}

}

stage('启动jar') {

steps {

//设置后台保活

/**

*第一行设置后台保活

* 第二行杀死旧的进程

* 第三行复制jar

* 第四行启动运行 jar

*/

sh '''

export JENKINS_NODE_COOKIE=asdsdfsdf

ps -ef|grep TestExample-0.0.1-SNAPSHOT.jar|awk '{print $2}'|xargs echo

cp target/*.jar /root/jar

java -jar /root/jar/*.jar &>/root/jar/nohup.out &

'''

echo '启动 jar'

}

}

}

}

调用sonarqube的质量门禁

stage('代码质量门禁'){

steps{

script{

#等待质量门禁通过

def qg =waitForQualityGate()

echo "门禁结果为: ${qg.status}"

if(qg.status!='OK'){

echo "质量门禁不通过"

error '未达到Sonarqube质量门标要求!'

}

}

}

}

sonarlint的使用

这是一个idea插件,安装插件以后,尅开始分析

这种方式不会上传检查结果,只是拉取服务器的规则,方便代码中定义缺陷

如果项目中有html代码,那么会依赖node,如果找不到 node报错但是依旧可以出报告

如果代码里面有JS 文件,或者html文件里面有JS文件需要node环境