一、搭建docker+sonarqube
步骤1:进入服务器,创建一个文件夹sonarqube
$ ssh root@ip
$ mkdir sonarqube
$ cd sonarqube
# 可以选用临时或者正式部署方案
# 临时部署方案
# 通用部署
$ docker run -d \
--name sonarqube_temp \
-p 9000:9000 -p 9092:9092 \
sonarqube
# mac部署
$ docker run -d \
--name sonarqube_temp \
-p 9000:9000 -p 9092:9092 \
--platform linux/x86_64 \
-e SONAR_SEARCH_JAVAADDITIONALOPTS="-Dbootstrap.system_call_filter=false" \
sonarqube
步骤2:正式环境部署方案
# 创建容器网络
$ docker network create sonarqube
步骤3:创建数据库容器实例
#创建数据库容器实例
docker run -d \
--name sonarqube_postgres \
--network sonarqube \
-e POSTGRES_USER=sonarqube \
-e POSTGRES_PASSWORD=sonarqube \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v $PWD/postgresql_data:/var/lib/postgresql/data \
postgres
步骤4:创建sonarqube容器实例
# 创建sonarqube容器实例,可以通过-Xms4g -Xmx4g增加下ES的堆内存大小
# mac环境需要加 -e SONAR_SEARCH_JAVAADDITIONALOPTS="-Dbootstrap.system_call_filter=false"
$ docker run -d \
--name sonarqube_lu \
-p 9000:9000 -p 9092:9092 \
--network sonarqube \
-e SONARQUBE_JDBC_USERNAME=sonarqube \
-e SONARQUBE_JDBC_PASSWORD=sonarqube \
-e SONARQUBE_JDBC_URL="jdbc:postgresql://sonarqube_postgres/sonarqube" \
-e SONAR_SEARCH_JAVAADDITIONALOPTS="-Xms2g -Xmx2g" \
-e SONARQUBE_WEB_JVM_OPTS="-Xms1g -Xmx1g" \
-v $PWD/sonarqube_data:/opt/sonarqube/data \
-v $PWD/sonarqube_extensions:/opt/sonarqube/extensions \
-v $PWD/sonarqube_logs:/opt/sonarqube/logs \
sonarqube
步骤5:浏览器输入ip:9000进入sonarqube,初始用户名密码:admin/admin
步骤6:进入My account-security生成token方便使用
步骤7:将他们配置到 ~/.bash_profile
$ vim ~/.bash_profile
export SQ_HOST=http://ip:9000
export SQ_TOKEN=72fbaeca411e73e5c58c0deca30e655affea1608
步骤8:安装你需要的插件
步骤9:安装完成后点击Restart重启sonoarqube
sonarqube 基本环境配置完成,接下来我们就可以去用 scanner 分析代码了
Go语言可以用scanner,java语言可以使用maven、gradle
二、使用SonarScanner分析项目
步骤1:安装SonarScanner
SonarScanner地址:SonarScanner | SonarQube Docs
docker地址:Docker Hub
# pull镜像
$ docker pull sonarsource/sonar-scanner-cli:latest
步骤2:docker scanner和项目安装在同一环境中,进入你要分析的项目的目录,目的是要将当前路径($PWD)挂在到/usr/src
步骤3:运行sonar-scanner去分析项目
# 可以进入需要分析的项目路径,然后将当前目录挂载到/usr/src
$ docker run --rm -it -e SONAR_HOST_URL=$SQ_HOST -e SONAR_LOGIN=$SQ_TOKEN -v $PWD:/usr/src sonarsource/sonar-scanner-cli:latest -Dsonar.projectKey=xxx-scanner
三、使用maven单模块项目代码分析
步骤1:安装java+mvn
# 下载java11
https://www.oracle.com/java/technologies/downloads/#java11
# 进入目录并将java11移到该目录下
$ cd /usr/local/java
# 解压java到/usr/local/java
$ tar -zxvf jdk-11.0.17_linux-x64_bin.tar
# 下载apache-maven
$ wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz
# 解压apache-maven到/usr/local/
$ tar -zxvf apache-maven-3.8.6-bin.tar.gz
# 配置java和maven的环境变量
$ vim /etc/profile
#set Java environment
export JAVA_HOME=/usr/lib/java/jdk-11.0.17
export PATH=$JAVA_HOME/bin:JAVA_HOME/bin$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#set Maven environment
export MAVEN_HOME=/usr/local/apache-maven-3.8.1 //这里是你的maven的路径
export PATH=$MAVEN_HOME/bin:$PATH
# 重新加载系统配置文件
$ source /etc/profile
# 检查是否安装成功
$ java -version
$ mvn -v
步骤2:配置setting.xml(可省略)
在文件中设置host、token等
# 进入setting配置
$ cd /usr/local/apache-maven-3.8.6/conf/settings.xml
# 内容
<settings>
<mirrors>
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
</mirrors>
<pluginGroups>
<pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
</pluginGroups>
<profiles>
<profile>
<id>sonar</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<!-- Optional URL to server. Default value is http://localhost:9000 -->
<sonar.host.url>
http://myserver:9000
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
步骤3:进入你要分析的项目的目录,检查pom.xml文件,此处的java版本要和本地的java版本一致
步骤4:运行mvn
# 方式1:如果已经设置了settings.xml,则运行
$ mvn org.sonarsource.scanner.maven:sonar-maven-plugin:LATEST:sonar
# 方式2:如果没有设置settings.xml,
可以直接通过命令指定host、token (前提要配置SQ_HOST、SQ_TOKEN)
使用这种方法执行就不用配置projectKey,因为会从项目中的pom.xml中读取版本号等信息
$ mvn clean verify \
org.sonarsource.scanner.maven:sonar-maven-plugin:LATEST:sonar \
-Dsonar.host.url=$SQ_HOST \
-Dsonar.login=$SQ_TOKEN \
-Dcheckstyle.skip \
-Dmaven.gitcommitid.skip=true
运行成功:
步骤5:进入ip:9000查看报告
遇到的问题1:
# 运行mvn分析项目时报错
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar (default-cli) on project litemall: Execution default-cli of goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar failed: An API incompatibility was encountered while executing org.sonarsource.scanner.maven:sonar-maven-plugin:3.9.1.2184:sonar: java.lang.UnsupportedClassVersionError: org/sonar/batch/bootstrapper/EnvironmentInformation has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
解决1:
项目需要的java版本是11,我本地是java8,后面升级到java11就成功解决