安装服务器端的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文件的
.
.这里是你别的maven 设置
.
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环境