8c31d6b3a1b0680b07eb009d68398bc8495c74f9
版本支持参考:8.9版本
根据需要安装对应的版本,官方安装文档参考:
8.9版本
最新版本
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
$SONAR_HOME/extensions/plugins
目录即可,
推荐安装的插件有:http://[jenkins_url]/sonarqube-webhook/
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
}
}
}
}
(1)该插件只能检测sonarqube默认的规则,不能检测阿里巴巴的基于pmd的p3c规则, 原因:https://blog.csdn.net/weixin_42617348/article/details/81170166;
(2)开发过程中,要通过maven的sonar插件规则校验。
maven配置参考官网
8.9版本
最新版本
项目模块使用方式:
mvn clean package sonar:sonar
或者 直接使用sonar-scanner软件扫描。问:为什么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来做静态代码检测。
SONAR_SCANNER_HOME=/path/to/sonar-scanner-[version]
PATH=$SONAR_SCANNER_HOME/bin:$PATH
在项目的根目录下创建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\**\*
在package.json中添加配置:
{
...
scripts: {
//根据项目的情况,后面添加" & sonar-scanner"
"eslint": "eslint & sonar-scanner"
}
}