Sonar是一個用於代碼質量管理的開放平臺,經過插件機制,Sonar能夠集成不一樣的測試工具、代碼分析工具以及持續集成工具。與持續集成工具(如Hudson/Jenkins等)不一樣,Sonar並非簡單地把不一樣代碼檢查結果(例如:FindBugs、PMD等)直接顯示在web UI界面上,而是經過不一樣的插件對這些結果再加工處理,經過量化的方式度量代碼質量的變化,從而能夠方便地對不一樣規模和種類的工程進行代碼質量管理。javascript
在對其餘工具的支持方面,Sonar 不只提供了對 IDE 的支持,能夠在 Eclipse 和 IntelliJ IDEA 這些工具裏聯機查看結果;同時 Sonar 還對大量的持續集成工具提供了接口支持,能夠很方便地在持續集成中使用 Sonar。php
此外,Sonar 的插件還能夠對 Java 之外的其餘編程語言提供支持,對國際化以及報告文檔化也有較好的支持。java
Sonar 的功能就是來檢查代碼是否有 BUG。除了檢查代碼是否有 bug 還有其餘的功能,好比說:你的代碼註釋率是多少,代碼有一些建議,編寫語法的建議。因此稱之爲質量管理。mysql
接下來的配置是基於博文部署Jenkins+Gitlab實現持續集成的環境進行部署
全部的源碼包及插件均可以在此連接(提取碼: t976)下載linux
[root@jenkins ~]# unzip sonarqube-5.6.zip [root@jenkins ~]# mv sonarqube-5.6/ /usr/local/sonarqube [root@jenkins ~]# ln -s /usr/local/sonarqube/bin/linux-x86-64/sonar.sh /usr/local/bin/
sonar須要使用到數據庫,這裏我使用MySQL數據庫,若是環境中存在數據庫,則無需部署,只須要建立相應的庫及帳號便可git
#採用RPM包的方式部署MySQL [root@jenkins ~]# mkdir mysql [root@jenkins ~]# cd mysql/ [root@jenkins mysql]# rz [root@jenkins mysql]# ls # 肯定有以下幾個包 mysql-community-client-5.7.25-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.25-1.el7.x86_64.rpm mysql-community-common-5.7.25-1.el7.x86_64.rpm mysql-community-server-5.7.25-1.el7.x86_64.rpm mysql-community-libs-5.7.25-1.el7.x86_64.rpm [root@jenkins mysql]# yum -y localinstall mysql-community-* # 安裝MySQL [root@jenkins mysql]# systemctl start mysqld # 啓動 [root@jenkins mysql]# netstat -anput | grep 3306 tcp6 0 0 :::3306 :::* LISTEN 11411/mysqld [root@jenkins mysql]# grep password /var/log/mysqld.log # 在MySQL日誌中查看登錄密碼 2020-03-19T17:29:37.381630Z 1 [Note] A temporary password is generated for root@localhost: DfkgCtPsu5:4 #上面末尾就是MySQL的默認root密碼 [root@jenkins mysql]# mysql -u root -p'DfkgCtPsu5:4' mysql> alter user 'root'@'localhost' identified by 'Zyz@123.com'; mysql> create database sonar character set utf8 collate utf8_general_ci; mysql> grant all on sonar.* to 'sonar'@'%' identified by 'Zyz@123.com'; mysql> grant all on sonar.* to 'sonar'@'localhost' identified by 'Zyz@123.com'; mysql> flush privileges;
[root@jenkins mysql]# cd /usr/local/sonarqube/conf/ [root@jenkins conf]# sed -i 's/#sonar.jdbc.username=/sonar.jdbc.username=sonar/g' sonar.properties #定義鏈接數據庫的用戶 [root@jenkins conf]# sed -i 's/#sonar.jdbc.password=/sonar.jdbc.password=Zyz@123.com/g' sonar.properties #指定數據庫用戶的密碼 [root@jenkins conf]# echo 'sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance' >> sonar.properties #用來定義鏈接數據庫的地址及端口 [root@jenkins conf]# sed -i 's/#sonar.web.port=9000/sonar.web.port=9000/g' sonar.properties #配置sonar支持中文頁面及支持PHP [root@jenkins conf]# cd /usr/local/sonarqube/extensions/plugins/ [root@jenkins plugins]# cp ~/sonar-l10n-zh-plugin-1.11.jar ./ [root@jenkins plugins]# cp ~/sonar-php-plugin-2.9-RC1.jar ./ [root@jenkins plugins]# sonar.sh start #啓動sonar,給它點初始化的時間 [root@jenkins conf]# tail -2 /usr/local/sonarqube/logs/sonar.log #查看sonar日誌 2020.03.20 02:00:29 INFO ce[o.s.ce.app.CeServer] Compute Engine is up 2020.03.20 02:00:29 INFO app[o.s.p.m.Monitor] Process[ce] is up #當出現上面兩行以「up」結尾的則表示sonar啓動正常。 [root@jenkins conf]# netstat -anput | grep 9000 tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 52610/java
client訪問sonar的web界面:
web
#配置代碼掃描 [root@jenkins ~]# unzip sonar-scanner-cli-3.3.0.1492-linux.zip [root@jenkins ~]# mv sonar-scanner-3.3.0.1492-linux/ /usr/local/sonar-scanner [root@jenkins ~]# ln -s /usr/local/sonar-scanner/bin/sonar-scanner /usr/local/bin/ [root@jenkins ~]# ln -s /usr/local/sonar-scanner/bin/sonar-scanner /usr/bin/ [root@jenkins ~]# cd /usr/local/sonar-scanner/conf/ [root@jenkins conf]# egrep -v '^#|^$' sonar-scanner.properties # 修改配置文件至以下 sonar.host.url=http://localhost:9000 sonar.sourceEncoding=UTF-8 #如下是從sonar的主配置文件中複製:/usr/local/sonarqube/conf/sonar.properties中複製過來的,用於鏈接數據庫 sonar.jdbc.username=sonar sonar.jdbc.password=Zyz@123.com sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance
[root@jenkins ~]# unzip testalyzer-master.zip [root@jenkins ~]# cd testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests/ [root@jenkins php-sonar-runner-unit-tests]# cat sonar-project.properties #看一下下面的文件中都包含了些什麼 sonar.projectKey=org.sonarqube:php-ut-sq-scanner #自定義祕鑰,若是祕鑰同樣,就會自動覆蓋以前的測試結果 sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner #web界面顯示的名稱 sonar.projectVersion=1.0 #版本 sonar.sources=src #軟件包存放路徑 sonar.tests=tests #測試路徑 sonar.language=php #要測試的語言 sonar.sourceEncoding=UTF-8 #編碼格式 #測試PHP代碼 [root@jenkins php-sonar-runner-unit-tests]# pwd # 肯定當前路徑 /root/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests [root@jenkins php-sonar-runner-unit-tests]# sonar-scanner #測試js代碼 [root@jenkins php-sonar-runner-unit-tests]# cd ../../javascript/javascript-sonar-runner [root@jenkins javascript-sonar-runner]# sonar-scanner
當執行完成對js及PHP的測試後,便可在sonar的web界面看到以下內容:
點擊進入後能夠看到詳細信息:
sql
登陸到Jenkins的web界面,須要安裝插件,有在線安裝及離線安裝兩種方式,我這裏選擇離線安裝,能夠自行進行在線安裝的方式
一、依次點擊:系統管理===>>插件管理===>>高級,而後下拉頁面:
下載我提供的插件,按照如下順序依次添加,如果在線安裝,依次搜索「SonarQube Scanner」、「Gerrit Trigger」、"Sonar Gerrit Plugin"進行安裝便可:
二、依次點擊:系統管理===>>系統設置,而後配置以下:
切記要點保存
三、依次點擊:系統管理===>>全局工具配置,而後單擊以下:
四、進入構建的項目,而後點擊進入,以下:
在終端複製一下代碼:數據庫
[root@jenkins /]# cd ~/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests/ [root@jenkins php-sonar-runner-unit-tests]# egrep -v '^#|^$' sonar-project.properties #複製以下代碼 sonar.projectKey=org.sonarqube:php-ut-sq-scanner sonar.projectName=PHP :: PHPUnit :: SonarQube Scanner sonar.projectVersion=1.0 sonar.sources=src sonar.tests=tests sonar.language=php sonar.sourceEncoding=UTF-8 sonar.php.coverage.reportPath=reports/phpunit.coverage.xml sonar.php.tests.reportPath=reports/phpunit.xml
五、而後在圖中粘貼複製的代碼(爲了方便區分測試結果,建議修改「sonar.projectKey」的值):
六、回到終端,向gitlab提交代碼,便可實現自動sonar掃描編程
[root@jenkins php-sonar-runner-unit-tests]# pwd /root/testalyzer-master/projects/languages/php/php-sonar-runner-unit-tests [root@jenkins php-sonar-runner-unit-tests]# cp -r * ~/test1/ #將測試代碼複製到本地git庫(若是沒有本地git庫,能夠再次克隆一下) [root@jenkins php-sonar-runner-unit-tests]# cd ~/test1/ # 進入到本地git庫 [root@jenkins test1]# rm -rf sonar-project.properties #刪除這個文件,不須要使用它來給咱們指定要測試的代碼了 #由於咱們在剛纔的web界面已經將其配置文件寫在了web界面。優先使用web界面配置的檢測代碼。 #不刪除這個文件也行 #而後提交到遠端的gitlab庫 [root@jenkins test1]# git add * [root@jenkins test1]# git commit -m "test sonar" [root@jenkins test1]# git push origin master
當提交到遠端gitlab庫後,便可看到sonar的web界面已經進行了代碼掃描,而且顯示出了掃描結果,以下:
七、配置Jenkins郵件報警
開始配置郵件報警:
在Jenkins的web界面依次點擊:系統管理===>>系統設置,而後在下面輸入系統管理員的郵箱地址並保存:
再次點擊:系統管理===>>系統設置
配置項目,以下:
在此點擊項目>>配置
至此,郵箱報警就配置完成了,此時,能夠在控制檯關閉gitlab或者手動構建代碼,測試是否能夠收到報警郵件。