一、搭建
1.搭建postgresql数据库
docker run -d -p 5432:5432 --name postgresql -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar postgres
2.搭建sonar镜像:
重新构建sonar镜像,下载汉化包,Dockerfile如下(也可以添加其他插件):
下载汉化包地址:https://github.com/xuhuisheng/sonar-l10n-zh/releases
FROM sonarqube
ADD sonar-l10n-zh-plugin-8.6.jar /opt/sonarqube/extensions/plugins/
docker build -t sonarqube:zh_CN .
3.搭建sonar容器
docker run -d -p 9000:9000 --name sonar --link postgresql:postgresql -e SONAR_JDBC_USERNAME=sonar -e SONAR_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://postgresql:5432/sonar sonarqube:zh_CN
报错:
[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ERROR: Elasticsearch did not exit normally - check the logs at /opt/sonarqube/logs/sonarqube.log
解决:
sudo vim /etc/sysctl.conf
vm.max_map_count=655360
保存之后:
sysctl -p
重启容器:
docker restart sonar
访问:http://localhost:9000/
默认密码:admin,admin
二、使用
pom.yml添加sonar插件
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
sonar配置https://blog.51cto.com/9025736/2061964
执行mvn clean install
,然后再执行mvn sonar:sonar
,看到如下信息即可
注意:此时会有一个问题,代码覆盖率为0.0%,添加如下
<build>
<plugins>
<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<includes>com.*</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>prepare-agent</goal>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
流水线脚本添加:
- mvn sonar:sonar -Dsonar.host.url=http://192.168.10.32:9000 -Dsonar.login=634afcadd0a0f5bc6b58569b740c398ccb54b905
- npm集成sonar
npm install -g sonarqube-scanner
var gulp = require('gulp');
var sonarqubeScanner = require('sonarqube-scanner');
gulp.task('default', function(callback) {
sonarqubeScanner({
serverUrl : "https://sonarcloud.io",
token : "019d1e2e04eefdcd0caee1468f39a45e69d33d3f",
options : {
"sonar.organization": "my-org"
}
}, callback);
});