我們都知道,sonar是用來做代碼的質量檢測的,並且支持多種語言,之前看到很多地方寫搭建sonar,就覺的應該很好搭建,然后昨天自己試着搭建了一下,發現自己真的是想的太簡單了,有些坑,還是寫出來讓大家看看,不要再掉進去了。
准備工作:下載sonar: https://www.sonarqube.org/downloads/ 我下載了一個6.7.7的版本,剛開始我下了最新的8.0的版本,但是一直報錯:mysql.driver的報錯,然后我還是用了一個穩定版本。
我的環境:ubuntu (本來想找centos的,但是先生買了阿里雲的機器,還是ubuntu,所以我也就將就用了,如果你的是centos的,記得修改下安裝命令就可以了)
1.安裝mysql ,安裝好以后,用mysql -V (V大寫)查一下版本,如下:
安裝好mysql以后,在數據庫中創建sonar用戶:操作如下:
MySQL> CREATE USER 'sonar'@'%' IDENTIFIED BY 'sonar123';
MySQL> CREATE DATABASE sonar CHARACTER SET UTF8;
MySQL> GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%';
上面主要做的事情就是:為sonar 創建一個數據庫和使用這個數據庫的用戶,並進行授權
mysql版本要等於5.6或者5.6以上,否則sonar無法啟動
2.在opt目錄下創建一個softs文件夾,將下載的sonar zip包解壓到該目錄下。
unzip sonarqube-6.7.7.zip
然后修改/opt/softs/sonarqube-6.7.7/conf/sonar.properties 文件,目前我只配置了一下幾項:
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
sonar.web.host=0.0.0.0
sonar.web.context=
sonar.web.context=
3.使用sonar用戶啟動sonar,否則會報es的錯(重點:因為安全問題elasticsearch 不讓用root用戶直接運行)
adduser sonartest #創建sonar用戶
passwd 123456 #創建sonar用戶的密碼
【 原來我寫的是:chown -R sonartest:123456 sonarqube-6.7.7 #給sonar目錄賦權限 (這里范了一個大錯,用戶組寫成了密碼,難怪一直報es的錯,害我調試了好久)】
chown -R sonartest:sonartest sonarqube-6.7.7 #給sonar目錄賦權限 【這里很重要】
su sonartest #切換到sonar用戶
進入到/opt/softs/sonarqube-6.7.7/bin/linux-x86-64目錄下,
執行./sonar.sh restart 來啟動sonar
(1)es報錯:參考https://blog.csdn.net/zdyueguanyun/article/details/79447260
(2)這里我還遇到一個問題,./sonar.sh restart的時候報錯了,說temp下的一個yml文件禁止訪問,然后我進入/opt/softs/sonarqube-6.7.7/temp,執行ls -all 發現有寫文件還是root權限的,我懷疑可能是我沒切換用戶的時候執行restart生成的,這時只需要再執行一次 “chown -R sonartest:sonartest sonarqube-6.7.7”就可以了。(這里已經不需要了,因為我上面把賦權限寫錯了,所以如果有問題,多考慮下是不是權限的問題)
(3)還有一個問題,restart的時候報錯JVM失敗的問題,是因為我切換用戶后沒有執行source /etc/profile使jdk環境變量生效,這很簡單,再執行一次 “ source /etc/profile就可以了”
這里我查了資料,(切換用戶,/etc/profile中的環境變量不生效了)解決辦法有如下:
(3.1)辦法1:用su命令切換用戶的時候,/etc/profile會失效,應該使用su - 用戶名。
(原理:https://www.cnblogs.com/liujiangyi/p/9455960.html)
(3.2)辦法2:/etc/profile.d/ 目錄下建一個文件如:java.sh,配置對環境變量。
(3.3)辦法3:在 ~/.bashrc 加上如下的代碼,(建立在profile已配環境變量,如果沒有配,也可以直接把環境變量的配置配到~/.bashrc上)
(https://blog.csdn.net/u011553945/article/details/101516559)
4.成功否
在瀏覽器輸入http://ip:9000,如果看到如下頁面,表示安裝成功(默認登陸賬號是 admin 密碼是admin):
5.漢化:用admin admin登陸成功后,按照下圖操作:
等待安裝完成以后,重啟:
再次登陸,就變成中文的了:
6.安裝掃描器sonar-scanner
下載:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/ (含簡單的使用說明)
我下載了sonar-scanner-cli-4.2.0.1873-linux.zip
(6.1)解壓到/opt/softs目錄下(任意目錄都可以,這里只是為了方便管理),得到如下文件夾:
(6.2)切換到root用戶,修改/etc/profile,添加sonnar環境變量,如下:
保存退出后,執行source /etc/profile 使環境變量生效
(6.3)輸入sonar-scanner -v 顯示如下,則表示安裝成功了:
(6.4)關聯sonarqube 和sonnar scanner
在/opt/softs/sonar-scanner-4.2.0/conf/sonar-scanner.properties中添加如下內容:
sonar.host.url=http://sonnar_ip:9000 sonar.login=admin sonar.password=admin sonar.jdbc.username=sonar sonar.jdbc.password=sonar123 sonar.jdbc.url=jdbc:mysql://sonnar_ip:3306/sonar?useUnicode=true&characterEncoding=utf8
7.使用sonarqube + sonar-scanner做代碼檢測:
(7.1)打開要進行代碼分析的項目根目錄,新建sonar-project.properties文件
(7.2)輸入以下信息:
# must be unique in a given SonarQube instance sonar.projectKey=my:project # this is the name displayed in the SonarQube UI sonar.projectName=apiautocore sonar.projectVersion=1.0 # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # Since SonarQube 4.2, this property is optional if sonar.modules is set. # If not set, SonarQube starts looking for source code from the directory containing # the sonar-project.properties file. sonar.sources=src # Encoding of the source code. Default is default system encoding #sonar.sourceEncoding=UTF-8
其中:projectName是項目名字,sources是源文件所在的目錄
(7.3)設置成功后,啟動sonarqube服務
(7.4)進入項目所在的根目錄,輸入命令:sonar-runner,分析成功后會有success信息
(7.5)瀏覽器輸入http://sonar_ip:9000登陸sonnarqube,就能看到你剛才掃描的工程信息
sonar 啟動失敗,es報錯(查看logs目錄下的es.log即可):
es[][o.e.b.BootstrapChecks] max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決:
在 /etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
參考:
https://blog.csdn.net/zdyueguanyun/article/details/79447701
https://www.cnblogs.com/reblue520/p/7131260.html?utm_source=itdadao&utm_medium=referral (含在jenkins上的配置)
以下是基於postgresql安裝的sonarqube8以上的版本的參考文檔:
https://blog.csdn.net/africanviolet/article/details/108224618