在我们上线代码前,一般需要在我们本地做扫描,所以我们通常会在本地安装一个Windows的版本先做扫描,然后上传代码,最后由公司的SonarQube做一次统一的检测,然后再上线代码。
sonarqube目录
这里简单说下每个目录作用
1.bin 用来启动 SonarQube 服务,这里已经提供好了不同系统启动 | 停止脚本了,目前提供了 linux-x86-32、linux-x86-64、macosx-universal-64、windows-x86-32、windows-x86- 64
2.conf 用来存放配置文件,若需要修改配置,修改 sonar.properties 文件即可。
3.data 用来存放数据,SonarQube默认使用 h2 数据库存储,同时支持其他如Orace、Mssql、 Postgresql数据库存储。
4.extensions 用来存放插件 jar 包,以后我们需要安装插件就放在这里。
5.lib 用来存放各种所依赖的 jar 包,包括上边各数据库驱动包 (默认已提供一个版本,如果版本不 匹配,则在这里手动更新下)。
6.logs 用来存放各日志信息
7.web 用来提供 SonarQube web 网页服务。
安装常见的问题
下载解压完成后,可以启动SonarQube了:
![](https://img.haomeiwen.com/i23703037/e9e8808a583324a4.png)
这里我的本机已经是JDK11的环境了,会提示缺少ES,要求要安装ES。另外还提示了GC设置错误,这里我们可以参照他的提示做相应的配置修改就可以了。
![](https://img.haomeiwen.com/i23703037/2f3b3e03b5d8ffc2.png)
另外可能常见的错误还有下面这些:
错误信息1
jvm 1 | WrapperSimpleApp: Encountered an error running main:
java.lang.IllegalStateException: SonarQube requires Java 11+ to run jvm 1 |
java.lang.IllegalStateException: SonarQube requires Java 11+ to run jvm 1 |
at org.sonar.application.App.checkJavaVersion(App.java:93) jvm 1 |
at org.sonar.application.App.start(App.java:56) jvm 1 |
at org.sonar.application.App.main(App.java:98) jvm 1 |
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) jvm 1 |
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62 )jvm 1 |
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:43) jvm 1 |
at java.lang.reflect.Method.invoke(Method.java:498) jvm 1 |
at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240) jvm 1 |
at java.lang.Thread.run(Thread.java:748) wrapper | <-- Wrapper Stopped
解决方案
sonarqube7.9 ->必须使用JDK11->不能使用其他JDK版本
更换本机JAVA_HOME变量为JDK11版本。
大家可以自行测试JDK14是否支持sonarqube7.9.X
错误信息2
app[][o.e.t.n.Netty4Transport] exception caught on transport layer [[id: 0xe5d5a747, L:/127.0.0.1:18558 - R:/127.0.0.1:9001]], closing connection
io.netty.handler.codec.DecoderException: java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50)
解决方案
1.查看ELK的日志
%sonarqube_home%/logs/es.log
发现9001端口被windows系统占用,默认的是9001的端口。
2.打开cmd窗口。输入命令:
netstat -ano
3.发现PID=4的进程占用9001端口
打开任务管理器,找到PID=4的进程。结束进程,发现无法结束进程。
只能进入sonar.properties里修改ES端口。
4.更改ELK启动端口为9003
打开文件:
%sonarqube_home%/conf/sonar.properties
更改文件272行左右。去掉注释,更新端口为9003
sonar.search.port=9003
文件位置示例:
![](https://img.haomeiwen.com/i23703037/b8dc02c9ea690961.png)
中文插件
这一步是可选的,如果说英文看着不太习惯的可以考虑下中文插件,注意sonarqube版本和插件包的匹配,这里7.9.6版本的需要下载sonar-l10n-zh-plugin-1.29.jar
https://github.com/SonarQubeCommunity/sonar-l10n-zh
而8.5.x以后的版本sonarqube版本和插件包的版本已经改成对应一致的了,也就是8.9.x的版本中文插件包版本也是8.9,.x,依次类推。
启动访问
安装完成后通过localhost:9000可以访问SonarQube
网友评论