前言
SonarQube 是一款用於代碼質量管理的開源工具,它主要用於管理源代碼的質量。 通過插件形式,可以支持眾多計算機語言,比如 java, C#, go,C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等。sonar可以通過PMD,CheckStyle,Findbugs等等代碼規則檢測工具來檢測你的代碼,幫助你發現代碼的漏洞,Bug,異味等信息。 Sonar 不僅提供了對 IDE 的支持,可以在 Eclipse和 IntelliJ IDEA 這些工具里聯機查看結果;同時 Sonar 還對大量的持續集成工具提供了接口支持,可以很方便地在持續集成中使用 Sonar。
sonarqube7.9的前提條件是jdk11、postgreSQL
鏈接:https://pan.baidu.com/s/1BcrQhzv3piH7CBRPfB_RTg 提取碼:6d1q
安裝
jdk11安裝
參考:https://www.cnblogs.com/jxd283465/p/11541506.html
1 [root@localhost home]# java -version 2 java version "11.0.4" 2019-07-16 LTS 3 Java(TM) SE Runtime Environment 18.9 (build 11.0.4+10-LTS) 4 Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.4+10-LTS, mixed mode)
postgreSQL10.1安裝
參考:https://www.cnblogs.com/jxd283465/p/11550745.html
1 [root@localhost bin]# ./psql -V 2 psql (PostgreSQL) 10.10
sonarqube7.9安裝
1.解壓,重命名
# 解壓
unzip sonarqube-7.9.1.zip
# 重命名
mv sonarqube-7.9.1 sonarqube
如果報錯unzip not command: yum -y install unzip
2.創建sonarqube用戶組和用戶、賦權
1 # 創建sonarqube用戶組 2 [root@localhost home]# groupadd sonarqube 3 4 # 創建sonarqube用戶 -g指定用戶組 -p指定密碼 -M不創建home目錄 5 [root@localhost home]# useradd sonarqube -g sonarqube -p sonarqube -M 6 7 # 賦予/home/sonarqube文件夾sonarqube用戶權限 -R表示遞歸 8 [root@localhost home]# chown -R sonarqube:sonarqube /home/sonarqube
3.修改配置文件
# 修改sonarqube配置文件,增加postgres數據庫配置
vi /home/sonarqube/conf/sonar.properties
# postgres數據庫用戶名
sonar.jdbc.username=postgres
# postgres數據庫用戶名密碼
sonar.jdbc.password=postgres
# postgres數據庫地址
sonar.jdbc.url=jdbc:postgresql://127.0.0.1:5432/sonar?currentSchema=public
# sonar的web訪問端口
sonar.web.port=9002
4.配置啟動參數
# 修改sonar的啟動文件
vi /home/sonarqube/bin/linux-x86-64/sonar.sh
# 將runuser設置為sonarqube
RUN_AS_USER=sonarqube
5.啟動sonarqube
1 # 切換sonarqube用戶 2 [root@localhost home]# su sonarqube 3 4 # 啟動sonar 5 bash-4.2$ /home/sonarqube/bin/linux-x86-64/sonar.sh start 6 Starting SonarQube... 7 Started SonarQube.
瀏覽器訪問http://192.168.8.20:9002 訪問失敗
查看日志查找原因,日志在 /home/sonarqube/logs 下,分別查看es和sonar的啟動日志
1 bash-4.2$ pwd 2 /home/sonarqube/logs 3 bash-4.2$ ls -l 4 總用量 12 5 -rw-r--r--. 1 sonarqube sonarqube 3402 9月 19 16:52 es.log 6 -rw-r--r--. 1 sonarqube sonarqube 88 7月 10 12:21 README.txt 7 -rw-r--r--. 1 sonarqube sonarqube 1522 9月 19 16:52 sonar.log
查看es.log (elasticsearch)
1 bash-4.2$ cat es.log 2 2019.09.19 16:52:17 INFO es[][o.e.e.NodeEnvironment] using [1] data paths, mounts [[/home (/dev/mapper/centos-home)]], net usable_space [961.2gb], net total_space [962.7gb], types [xfs] 3 2019.09.19 16:52:17 INFO es[][o.e.e.NodeEnvironment] heap size [494.9mb], compressed ordinary object pointers [true] 4 2019.09.19 16:52:17 INFO es[][o.e.n.Node] node name [sonarqube], node ID [k784DcanQ1e4py5e75WQYQ] 5 2019.09.19 16:52:17 INFO es[][o.e.n.Node] version[6.8.0], pid[20791], build[default/tar/65b6179/2019-05-15T20:06:13.172855Z], OS[Linux/3.10.0-957.27.2.el7.x86_64/amd64], JVM[Oracle Corporation/Java HotSpot(TM) 64-Bit Server VM/11.0.4/11.0.4+10-LTS] 6 2019.09.19 16:52:17 INFO es[][o.e.n.Node] JVM arguments [-XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75, -XX:+UseCMSInitiatingOccupancyOnly, -Des.networkaddress.cache.ttl=60, -Des.networkaddress.cache.negative.ttl=10, -XX:+AlwaysPreTouch, -Xss1m, -Djava.awt.headless=true, -Dfile.encoding=UTF-8, -Djna.nosys=true, -XX:-OmitStackTraceInFastThrow, -Dio.netty.noUnsafe=true, -Dio.netty.noKeySetOptimization=true, -Dio.netty.recycler.maxCapacityPerThread=0, -Dlog4j.shutdownHookEnabled=false, -Dlog4j2.disable.jmx=true, -Djava.io.tmpdir=/home/sonarqube/temp, -XX:ErrorFile=../logs/es_hs_err_pid%p.log, -Des.enforce.bootstrap.checks=true, -Xms512m, -Xmx512m, -XX:+HeapDumpOnOutOfMemoryError, -Des.path.home=/home/sonarqube/elasticsearch, -Des.path.conf=/home/sonarqube/temp/conf/es, -Des.distribution.flavor=default, -Des.distribution.type=tar] 7 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] loaded module [analysis-common] 8 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] loaded module [lang-painless] 9 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] loaded module [mapper-extras] 10 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] loaded module [parent-join] 11 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] loaded module [percolator] 12 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] loaded module [reindex] 13 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] loaded module [repository-url] 14 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] loaded module [transport-netty4] 15 2019.09.19 16:52:18 INFO es[][o.e.p.PluginsService] no plugins loaded 16 2019.09.19 16:52:19 WARN es[][o.e.d.c.s.Settings] [http.enabled] setting was deprecated in Elasticsearch and will be removed in a future release! See the breaking changes documentation for the next major version. 17 2019.09.19 16:52:20 INFO es[][o.e.d.DiscoveryModule] using discovery type [zen] and host providers [settings] 18 2019.09.19 16:52:21 INFO es[][o.e.n.Node] initialized 19 2019.09.19 16:52:21 INFO es[][o.e.n.Node] starting ... 20 2019.09.19 16:52:21 INFO es[][o.e.t.TransportService] publish_address {127.0.0.1:9001}, bound_addresses {127.0.0.1:9001} 21 2019.09.19 16:52:21 INFO es[][o.e.b.BootstrapChecks] explicitly enforcing bootstrap checks 22 2019.09.19 16:52:21 ERROR es[][o.e.b.Bootstrap] node validation exception 23 [2] bootstrap checks failed 24 [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 25 [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 26 2019.09.19 16:52:21 INFO es[][o.e.n.Node] stopping ... 27 2019.09.19 16:52:21 INFO es[][o.e.n.Node] stopped 28 2019.09.19 16:52:21 INFO es[][o.e.n.Node] closing ... 29 2019.09.19 16:52:21 INFO es[][o.e.n.Node] closed
發現有兩個錯誤:
24 [1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535] 25 [2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決第一個:
vi /etc/security/limits.conf
修改配置文件,在文件最后加入下面兩個行。用戶退出重新登錄生效。
* soft nofile 65536
* hard nofile 65536
解決第二個:
臨時生效
sudo sysctl -w vm.max_map_count=262144
永久生效
# root用戶 vi /etc/sysctl.conf # 添加以下配置 vm.max_map_count=655360 # 生效 sysctl -p
重啟依舊報錯,查看日志發現web.log報錯
2019.09.19 17:13:20 WARN web[][o.a.c.l.WebappClassLoaderBase] The web application [ROOT] appears to have started a thread named [elasticsearch[_client_][transport_worker][T#12]] but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
java.base@11.0.4/sun.nio.ch.EPoll.wait(Native Method)
java.base@11.0.4/sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:120)
java.base@11.0.4/sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:124)
java.base@11.0.4/sun.nio.ch.SelectorImpl.select(SelectorImpl.java:136)
app//io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
app//io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:765)
app//io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:413)
app//io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:909)
java.base@11.0.4/java.lang.Thread.run(Thread.java:834)
2019.09.19 17:13:20 INFO web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9002
2019.09.19 17:13:20 INFO web[][o.s.p.ProcessEntryPoint] Hard stopping process
經過排查是postgresql中sonar數據庫未建立。
連接postgresql
CREATE DATABASE sonar WITH OWNER=postgres ENCODING='UTF-8';
啟動成功。
初始化密碼admin/admin
6.安裝中文插件