sonarqube安装
1、机器配置
4g,2u
maven:3.6.3
java:11
2、拉取镜像
docker pull sonarqube:9.9.3-community #这里拉取9.9.3的社区版
3、创建挂载目录
mkdir -p /data/sonarqube/{data,logs,extensions} #需要映射的目录
chown -R 777 /data/sonarqube/ #其实默认是1000的普通用户权限,也可以设置777,防止权限问题导致无法启动访问
4、启动镜像
docker run \
--name=sonarqube \
--privileged=true \
--restart=always \
--stop-timeout 3600 \
-e TZ="Asia/Shanghai" \
-p 9000:9000 \
-v /data/sonarqube/data:/opt/sonarqube/data \
-v /data/sonarqube/logs:/opt/sonarqube/logs \
-v /data/sonarqube/extensions:/opt/sonarqube/extensions \
-d sonarqube:9.9.3-community
5、访问服务
本机ip加端口 默认为admin/admin,然后修改密码
sonarqube汉化插件
1、下载插件
#切换到映射的目录
cd /data/sonarqube/extensions/
#创建插件目录
mkdir plugins
#下载插件
wget https://github.com/xuhuisheng/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-10.3/sonar-l10n-zh-plugin-10.3.jar
2、重启容器
docker restart 容器id
sonarqube本地项目扫描maven
1、创建项目
2、本地运行命令
1、更新settings.xml文件,该文件也定义了源等信息,未免最后报错,需要一份源settings.xml文件进行更新
配置sonarqube信息,在相应模块添加如下内容
<settings>
<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://192.93.22.22:9000 #sonarqube客户端的ip和端口
</sonar.host.url>
</properties>
</profile>
</profiles>
</settings>
2、进入到对应项目pom目录,执行
3、出现如下报错:
又要来了最全的包后,再次执行后,发现pom文件有定义的插件不通过,删掉pom文件内阻碍的插件的行,重新执行后,又发现setting.xml文件内定义的仓库地址是http类型的,maven在3.8后只支持https的,所以又将maven降级到3.6.3,java版本变成了11,再次执行,发现又报错一些找不到符号之类的错误
4、重新执行命令
mvn clean verify sonar:sonar \
-Dmaven.test.skip=true \
-Dsonar.projectKey=test \
-Dsonar.host.url=http://192.168.26.30:9000 \
-Dsonar.login=sqp_dc642ca473b9005b1214506c17bd5c3f933fc64d
使用Maven打包的时候,可能会因为单元测试打包失败,这时候就需要跳过单元测试。
- mvn clean install -DskipTests
- mvn clean install -Dmaven.test.skip=true
- DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下
- Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类
使用maven.test.skip,不但跳过单元测试的运行,也跳过测试代码的编译;
使用 mvn package -DskipTests 跳过单元测试,但是会继续编译。
5、编译成功
编译成功后,刚才创建的项目界面会自动刷新
sonarqube项目pdf导出
1、下载pdf插件
下载 sonar-pdf-plugin 插件,下载链接:sonar-pdf-plugin 发行版 - Gitee.com。
2、安装插件
进入到 extensions/plugins 插件目录内,把下载好的插件移入该目录
docker restart 容器id
3、配置pdf导出插件
4、重新扫描项目后才能pdf导出,所以需要重新执行下扫描命令
成功界面如下:
进入sonarqube端:
错误及解决:
1、进入download界面后如下
需要重新扫描
2、扫描不成功,报错:[ERROR] Something went wrong storing the PDF at server side. Error: {"errors":[{"msg":"An error has occurred. Please contact your administrator"}]}
代表存储错误,解决办法:
查看sonarqube的web日志发现,java报错无法在/opt/sonarqube/pdf-files内写入文件
进入容器后,创建对应目录,是发现没有写权限:mkdir: cannot create directory ‘pdf-files’: Permission denied,在容器外用docke -u 创建
docker exec -it -u root d24445aa8ec5 mkdir /opt/sonarqube/pdf-files
docker exec -it -u root d24445aa8ec5 chmod -R 777 /opt/sonarqube/pdf-files
重新扫描后,pdf成功上传