【前言】
隨着項目團隊規模日益壯大,項目代碼量也越來越多。且不說團隊成員編碼水平層次不齊,即便是老手,也難免因為代碼量的增加和任務的繁重而忽略代碼的質量,最終的問題便是bug的增多和代碼債務的堆積。因此,代碼review便日益提上了日程。當然人工review的效率還是相當低下的,於是我們采用了自動化代碼review的工具,便是今天的主角:SonarQube。
本系列主要講述sonarqube的安裝部署以及如何集成jenkins自動化分析.netcore項目。目錄如下:
- SonarQube系列一、Linux安裝與部署
- SonarQube系列二、分析dotnet core/C#代碼
- SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)
【SonarQube簡介】
SonarQube® 是一種自動代碼審查工具,用於檢測代碼中的錯誤,漏洞和多余的代碼。它可以與您現有的工作流程集成,以便在項目分支和拉取請求之間進行連續的代碼檢查。比如:
- SonarQube集成 gitlab,在分支推送的時候自動進行代碼檢查分析,生成代碼報告。
- SonarQube集成 jenkins,在代碼構建的時候自動進行代碼分析,生成代碼報告。
總之,SonarQube是可以配合一切好用的CI/CD工具進行自動化分析代碼並生成代碼報告,通過報告我們可以看到代碼中可能存在的bug和代碼債務。
官方網站:https://www.sonarqube.org/
【SonarQube安裝】
打開官網(上述官網地址),便可以很容易看到官方文檔的菜單,安裝步驟在官網很清楚了,我們參考文檔進行安裝,這里記錄整個安裝的過程以便幫助一些看文檔迷惑的學者。
官方文檔地址:https://docs.sonarqube.org/latest/
1.首先別忙着下載
左側有下拉框可以選擇sonarqube的各個版本,我們可以選擇切換不同的版本以查看不同時期的文檔
我們首先打開 Requirements ,查看當前版本的軟硬件支持。
- SonarQube 依賴於Java 環境,也就是需要安裝Jre,在這里寫了支持的版本:
- SonarQube 支持的數據庫有:PostgreSQL,Microsoft SQL Server,Oracle,注意7.9版本已經不對MySql進行官方的支持了,如果執意要用 Mysql 可能會遇到很多坑(我就被坑的不輕)。當然有的朋友想用Mysql數據庫,那么可以選擇安裝 7.7 以下版本(包括7.7)。
- SonarQube 運行需要ES(ElasticSearch),當然這個不用我們安裝,下載的安裝包已經包含了ES。
因為我用到了Mysql數據庫,綜合軟硬件說明我選擇了7.6版本的SonarQube進行下載安裝。
2.下載 SonarQube
同樣在左側菜單找到 Setup and Upgrade 選項,打開以后按步驟找到 Download 鏈接,下載對應版本的安裝包。
SonarQube 的安裝包是不分平台的,默認把所有平台的運行命令都下載下來,使用者根據不同環境運行不同的運行腳本。
下載完成后,我們把安裝包 sonarqube-7.6.zip 放在linux服務器的安裝目錄(喜歡的任意位置),然后用解壓命令解壓
unzip sonarqube-7.6.zip
進入文件夾,我們了解幾個重要的目錄
- bin目錄存放了各個環境的啟動腳本
- conf目錄存放着sonarqube的配置文件
- logs目錄存放着啟動和運行時的日志文件
3.配置 SonarQube
關於jdk的安裝這里就不多說了,我們直接進入sonarqube 的配置。
我們首先需要通過配置文件修改 sonarqube 的 mysql 連接字符串等信息,打開 conf 目錄的 sonar.properties
我們只需要修改mysql部分就ok了,其他不用過多設置
#----- DEPRECATED #----- MySQL >=5.6 && <8.0 # Support of MySQL is dropped in Data Center Editions and deprecated in all other editions # Only InnoDB storage engine is supported (not myISAM). # Only the bundled driver is supported. It can not be changed. sonar.jdbc.url=jdbc:mysql://localhost:39901/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&maxAllowedPacket = 16777216&useSSL=false sonar.jdbc.username=sonarqube sonar.jdbc.password=xxxxx
這里的配置是按照官方文檔的介紹,在mysql添加了一個 sonarqube 的用戶,並且創建了一個數據庫叫 sonarqube ,且將數據庫的讀寫執行權限賦給 sonarqube用戶,用於在站點初始化以及后續存儲設置數據時對數據庫進行修改。
sonarqube web 默認端口號為 9000 如果想修改成其他端口可以通過下面這個設置修改其他端口號。
wrapper.conf 這個配置文件里配置了java命令地址,sonarqube 的日志文件目錄等,可以關注下自己的 java 命令路徑,其他不用太過關注。
4.SonarQube 啟動
打開 sonarqube 的下載目錄的bin目錄,里面列舉了各個平台的啟動腳本
啟動之前先使用 chown 命令將sonarqube-7.6及其子目錄授權給一個非root的用戶,sonarqube及其es等軟件禁止 root賬戶啟動,因此需要切換一個非root賬戶,授權的用戶需要有bin目錄及其子目錄的讀取和可執行的權限。
然后我們找到對應平台的腳本,我的系統是64位的linux,進入 linux-x86-64 目錄
啟動sonar,執行 sonar.sh 腳本,並添加 start 參數
./sonar.sh start
如果不添加參數,會出現如下提示,是因為該腳本有必要的參數,包含了sonar服務的啟動/停止/重啟/dump等操作,可以根據使用場景提供不同的參數。
啟動之后,我們瀏覽器訪問對應服務器ip地址的9000端口(防火牆要提前放行9000端口)
如果沒有成功,那么就在logs目錄查看啟動日志。一般有幾種:
- es.log es或mysql等數據庫連接報錯,一般是mysql的連接字符串賬號密碼錯誤或者sonar賬號權限不夠;
- es.log 數據庫初始化失敗 MySQL sonar 賬戶權限不足
- sonar.log sonar服務的啟動日志
- web.log sonarqube web的啟動日志
如果一切順利的話,就會進入登陸頁面,賬號密碼都是 admin。
【SonarQube插件】
關於插件我本身使用不多,如果看不慣英文界面,那么就先裝個中文插件吧。
在頂部的菜單欄,配置里面,按下圖步驟,在下面插件搜索欄輸入chinese,即可搜到中文插件,然后點安裝。
等待安裝完畢,提示重啟sonar后,便自動切換到了中文界面。
【系統展望】
那么到此,sonar的安裝與配置便告一段落了,如果有任何問題歡迎留言區討論~