Sonar - 都2020年了,你的代碼還不規範?

Sonar - 都2020年了,你的代碼還不規範?

寫的一手漂亮又飄逸的代碼應該是每一個程序員的夢想。不規範、質量低的代碼可能短時間內對項目不會有什麼影響,但是時間長了對迭代和閱讀都會產生一定的阻礙。

正所謂無規矩不成方圓,咱國內從事Java開發的肯定都聽過阿里有一套編碼規範,我們可以通過各種IDE去做到使用阿里的代碼規範檢測我們自己的代碼。不過這裏我們不說阿里編碼規範,大家有興趣可以自己去搜索,這裏我們要介紹的是Sonar。

1.SonarLint

1.1 SonarLint是什麼?

 SonarLint是一個代碼質量檢測插件,可以幫助我們檢測出代碼中的不規範。要使用就要先了解【sonarlint官網】
在這裏插入圖片描述
 這裏以進來就可以看到官方給SonarLint的定義就是在問題存在之前解決問題。可以看出SonarLint不僅僅是規範我們的代碼,更可以幫助我們在編寫代碼時檢測和修復質量的問題。
在這裏插入圖片描述
 由於SonarlLint是一款比較輕量級的插件,所以它支持我們在各種我們熟悉的IDE中安裝直接就能夠使用,十分方便。並且我們還可以通過Sonar指定一個自定義的規範來使整個團隊一起遵循。

1.2 SonarLint下載安裝

 這邊我以IDEA爲例,安裝還是比較簡單的。直接通過Plugins-Marketplace插件市場就能夠下載安裝。
在這裏插入圖片描述
 有些小夥伴這個插件市場打不開的可以通過去【IDEA插件官網】下載安裝包離線安裝。這裏我給大家上傳到【UC網盤-SonarLint】上了,大家可以通過網盤下載可能快一點。別問我爲啥用UC網盤,我百度網盤開了一個超級會員他反而給我限速了,操作實在太騷了,反饋一個星期沒處理好。
在這裏插入圖片描述
 下載後通過Plugins-Install Plugin from Disk安裝即可。

1.3 SonarLint使用

 在Tools-SonarLint裏面我們可以修改相關的配置,也可以修改Sonar默認規則。有些版本的話可能Sonar的相關配置在Other Settings中,沒有的話大家可以自己找一下看。
在這裏插入圖片描述
在這裏插入圖片描述
 對於單個的類我們只要打開了,SonarLint就會自動掃描檢測告訴我們結果。
在這裏插入圖片描述
 我們也可以通過項目右鍵去掃描整個項目,這樣就可以掃描整個項目啦。
在這裏插入圖片描述
 這裏我們隨便找一個檢測看看有些什麼。首先會告訴我們整個問題是什麼,然後這裏還有各種級別來描述問題的嚴重性,安全級別應該是blocker > critical > major > minor > info。並且會給我們舉一個正反例,還是十分高效的。

 當我們使用了代碼質量檢測工具之後可以在一定程度上保證我們編寫代碼的質量。而且在我們項目開發過程中安全監測和質量分析本身也是項目的核心,這種靜態代碼分析的方式其實是可以幫助我們發現並解決大多數問題的。

 由於SonarLint支持代碼規範與質量檢測,就可以將很多指標例如:BUG、代碼重複率等各種維度代碼質量進行量化,可以更方便地對不同規模和種類的項目進行代碼質量管理。並且爲了更加方便於團隊查看,還提供了一個平臺來記錄每次檢測分析的結果,讓我們能夠更直觀地感受項目中各項指標的統計和分析,這就是接下來我們要介紹的SonarQube

2.SonarQube

2.1 SonarQube是什麼?

 上面我們介紹了SonarLint這款代碼質量檢測插件,但是我們平時開發一個項目組都是多個小夥伴一起參與的。那僅僅只有SonarLint我們估計只能自嗨了,除非大家安裝同一個版本的SonarLint,但其實Sonar的規則是可以自定義的。這裏我們就來看看這款SonarQube這款開源的代碼質量管理平臺。

 慣例咱們先看看【Sonar官網】
在這裏插入圖片描述
 簡單地說就是SonarQube支持團隊協作,功能和SonarLint基本都是一樣的,主要就是用來檢測代碼質量和安全。
在這裏插入圖片描述
 這裏介紹了SonarQube的一些主要功能。主要包括靜態代碼分析檢測、自定義代碼檢測規則、提升代碼可靠性、檢測應用程序可能存在漏洞以防出現安全問題、確保代碼庫乾淨維護性強。

 同時也支持多達27種編程語言以及各種IDE,還是十分強大的。

2.2 SonarQube下載安裝

 小夥伴們可以通過官方文檔【SonarQube GetStarted】快速瞭解SonarQube的一些相關內容。

 話不多說直接在官網找到下載【SonarQbe Download】,這裏我下好了一個版本同樣放在【UC網盤-SonarQube】上方便大家更快去下載。
在這裏插入圖片描述
 這裏下載後直接解壓就是下圖這樣,我們會解壓出兩個文件夾,這裏我們主要先來看sonarqube-7.9.1
在這裏插入圖片描述
 這裏我們大概來過一下整個目錄結構,介紹幾個主要的目錄功能。bin目錄不用多說,一般都放了各個環境的啓動引導程序或功能程序,一般都是可執行的;conf用來存放配置文件;extensions一般用來存放各種可擴展的工具,例如我們後面安裝插件就是存放在這裏;lib就是SonarQube運行所需的依賴庫;logs顧名思義整個運行過程中所產生的的日誌存放的位置了;這裏我們還能看到當前版本還有elasticsearch的目錄,這是因爲SonarQube在高版本加入了elasticsearch,後面小夥伴在啓動過程中還可能會出現一些elasticsearch相關的問題,這個大家可以留意一下。
在這裏插入圖片描述
 這裏我們找到conf/sonar.properties看一看幾個主要會修改的配置。

 首先第一個就是數據庫,SonarQube的運行需要依賴數據庫,這裏我們不修改配置直接使用默認Java嵌入式的H2內存數據庫,端口我們不關心這個使用默認SonarQube配置好的端口即可。
在這裏插入圖片描述
 再者就是sonar.web.port端口,這裏我們如果沒有特別需要也無需更改,只要知道9000是我們SonarQube默認端口就行,待會需要使用到。
在這裏插入圖片描述
 剩下的像JVM參數、日誌等級、ElasticSearch配置等都是我們可以根據自己需要修改的,這裏我們都使用默認的就好。
在這裏插入圖片描述
 我們再來看看wrapper.conf這個配置文件,這裏我只指定了一下jdk的目錄。這裏給大家講一下注意點,我們當前使用的版本需要至少JDK11才能夠支持,我這裏懶得配置環境變量就直接使用指定方式了,另外我把我使用的JDK11壓縮包也放在了【UC網盤-JDK】上,大家需要的話可以自行下載,當然直接去官網也是可以的。
在這裏插入圖片描述
 這裏我使用的是windows環境,找到\bin\windows-x86-64下的StartSonar,雙擊啓動。
在這裏插入圖片描述
 這裏可以看到SonarQube啓動相關的一些參數信息以及加載的一些依賴和插件。

 我這邊直接啓動成功了,但是給小夥伴提幾個注意點。第一個就是目前我們使用的這個版本,至少需要JDK11支持,我們可以通過環境變量或者直接通過配置文件配置都行,上面介紹了。另外一個就是在Linux環境下,由於運行期間會生成一些運行時文件,可能會導致權限問題啓動失敗,大家可以去創建一個新用戶授權並且用新用戶啓動即可。
在這裏插入圖片描述

2.3 SonarQube使用

 啓動成功後我們訪問http://localhost:9000,看到以下頁面的話我們的SonarQube旅程就正式開始了。
在這裏插入圖片描述
 我們先通過右上角使用默認用戶名密碼(admin/admin)登錄。這裏登錄成功後直接跳到了Projects項目工程頁。
在這裏插入圖片描述

2.3.1 插件市場

 不過這裏我們先不介紹這塊兒,我們先來到Administration-Marketplace,這裏可以看到提供了各式各樣的插件。其實每一款我使用的工具我最喜歡的就是逛插件市場,很多時候我覺得插件的豐富和活躍程度衡量了一個軟件擴展性的強弱,並且能夠足夠地保持這項工具或技術的生命力。
在這裏插入圖片描述
 先來安裝一款插件感受一下,話不多說我先搞一箇中文包,這裏搜索到插件之後直接點擊Install即可。
在這裏插入圖片描述
 安裝成功後點擊Restart Server稍等一會即可。
在這裏插入圖片描述

2.3.2 Projects項目頁

 首先是Projects項目頁,這個就是SonarQube的Home頁,這裏會列出我們所有的工程之後可以查看每個工程的詳情。這裏我們由於還沒有任何配置和導入,所以沒有工程顯示,待會我們來添加工程看一看效果如何。

 另外還有一個需要注意的,我們頁簽下面有一個小提示,由於我們使用了H2內嵌的數據庫,不滿足擴展性和遷移性,所以只建議我們在測試時使用。這個是因爲我們爲了方便,大家項目使用時根據自己情況選擇不同數據庫即可。
在這裏插入圖片描述
 這裏我們創建一個新項目進行演示,待會我們使用之前JVM的代碼進行檢測。

 這裏我們輸入項目名稱等信息後,需要設置一個令牌名稱用於後面校驗,然後選擇對應的開發語言和構建配置。
在這裏插入圖片描述
在這裏插入圖片描述
 比如這裏我配置完我這邊項目的信息後,他會告訴我Maven如何去執行SonarQube掃描,我們只需要在項目目錄下執行他給的命令即可mvn sonar:sonar -Dsonar.projectKey=springBoot-jvm -Dsonar.host.url=http://localhost:9000 -Dsonar.login=1b909feb90d33749662021ffdf4f959f5a5a4bc7
在這裏插入圖片描述
在這裏插入圖片描述
 我這邊項目比較簡單,分析還是比較快的。分析完後我們回到SonarQube就會切到分析項目的總覽頁面,當然也可以通過之前項目頁簽下去選擇。這裏我們來簡單看一下有一些什麼好玩的東西。

2.3.3 項目總面板

 我們進入指定的項目分析就會到跳轉到下面這個頁面。首先是總覽,這裏包括了整個項目分析的一些主要分析:Bugs漏洞安全熱點技術債務異味單元測試覆蓋率代碼重複度等。
在這裏插入圖片描述
 我們可以通過點擊總覽頁面某項指標直接定位到詳細的描述界面,也可以通過項目總面板上的問題切到整個項目所有的代碼檢測問題點。

問題一欄我們主要分爲兩部分。首先是左邊的過濾器,我們可以自定義各種類型條件去進行問題篩選,比如問題類型嚴重程度處理方式等。

 第二部分就是右邊的問題概覽,這裏會列出符合我們篩選條件的所有問題列表以及其核心描述和指標、等級。
在這裏插入圖片描述
 這裏我們隨便挑一個問題,可以通過查看規則就會把該問題所涉及的違規事項彈出在下面方便我們直接查看。

 小夥伴們應該還發現了SonarQube也幫我們把一個類中存在的問題都整理到了一起,更加方便我們去查看和修改。
在這裏插入圖片描述
 我們可以通過直接點擊某個問題切到問題詳情頁,這裏也主要分爲兩部分。

 第一部分是左邊的問題列表,會將我們所有存在的問題列出來方便直接在該頁面進行切換。第二部分就是右邊的問題相關的代碼主體,可以直接看到整個代碼類中存在的所有問題。

 另外我們還可以通過每個問題下面的操作選項去修改每個問題的類型嚴重程序以及人員分配問題標記(可標記解決或誤判)
在這裏插入圖片描述
 再來看指標這一頁,這裏可以看到每個類的各項指標以及安全和可靠性評級。
在這裏插入圖片描述
代碼一欄可以精確看到每個項目、每個目錄、每個類的一些檢測指標。

&esmp;另外活動主要就是記錄該項目的一些版本、問題處理的記錄。而配置一欄也是對當前項目進行一些配置的修改,比如權限自定義質量指標等。
在這裏插入圖片描述

2.3.4 Issues問題

 這裏的問題頁和我們上面介紹的指定項目總面板中的問題功能和結構一致,唯一區別就是這邊不區分項目,可以篩選所有項目的問題。我們也可以通過左邊篩選菜單去篩選具體項目,功能不贅述了。
在這裏插入圖片描述

2.3.5 Rules代碼規則

代碼規則下我們可以看到每種語言、每種類型的所有目前檢測的情況,並且可以對其進行修改。
在這裏插入圖片描述

2.3.6 Quality Profiles質量配置

質量配置就是我們檢測各種編程語言項目配置的一個質量檢測規則,這裏可以看到我創建了一個自定義的質量配置關聯在默認的Sonary way下,就相當於繼承了默認的規則配置。
在這裏插入圖片描述
 這裏我們點擊自定義的質量配置,可以看到已激活未激活的規則。我們隨便選一個規則可以修改其在各個質量配置中的嚴重程度,大家可以根據各自業務場景和技術場景需求進行自定義。
在這裏插入圖片描述
在這裏插入圖片描述

2.3.7 Quality Gates質量閾

質量閾很好理解,就是我們質量規則的各項指標的一個閾值,不滿足條件都會被檢測爲不合格。
在這裏插入圖片描述
 這裏我們也可以通過自己創建自定義的質量閾,添加我們自己制定的標準並且選擇標準所覆蓋的項目。
在這裏插入圖片描述

2.3.8 Administration配置管理

 配置管理的話就不過多介紹,主要就是對於SonarQube系統的全局的一些配置,包括各種規範、權限、項目、系統等一些管理,大家可以自己摸索。
在這裏插入圖片描述

3.IDEA連接SonarQube

 講了這麼多,那我們已經搭建了一套屬於我們團隊的SonarQube,那麼團隊小夥伴們開發時怎麼去綁定使用我們這個SonarQube呢。

 首先我們需要去生成一個令牌,這裏點擊SonarQube右上角頭像就可以找到,這裏我生成了一個IDEA-TOKEN的令牌,當然待會也可以使用用戶名和密碼去連接的。
在這裏插入圖片描述
 我們回到IDEA找到SonarLint在這裏我們新增一個SonarQube連接。
在這裏插入圖片描述
 把SonarQube地址填進去,然後我們使用的是令牌直接複製Token過來。
在這裏插入圖片描述
在這裏插入圖片描述
 添加連接成功後,我們在SonarLint - Project Settings裏面綁定我們剛纔配置的SonarQube連接。
在這裏插入圖片描述
 綁定成功後,我們隨便找一個文件分析,日誌裏面也會提示使用的是哪個SonarQube服務器。分析完之後我們就會發現,和之前我們在SonarQube上的結果是一致的。
在這裏插入圖片描述
在這裏插入圖片描述

4.Maven掃描代碼的兩種方式

4.1 setting.xml添加SonarScanner配置

 我們可以通過在Maven的setting.xml配置文件中加上sonar-maven-plugin,配置對應的SonarQube地址,這個時候我們可以通過mvn sonar:sonar對其進行掃描。當然也可以在項目例如編譯打包時(mvn clean compile sonar:sonar)加上掃描命令即可。

setting.xml

<profiles>
	<profile>
		<id>sonar</id>
		<activation>
			<activeByDefault>true</activeByDefault>
		</activation>
		<properties>
			<!-- Optional URL to server. Default value is http://localhost:9000 -->
			<sonar.host.url>
				http://127.0.0.1:9000
			</sonar.host.url>
		</properties>
	</profile>
</profiles>

4.2 直接使用Maven Sonar命令掃描

 上面那種方式我們如果在編譯打包的同時去掃描的話,每次我們操作都會進行質量檢測掃描,並且和其他命令組合的話效率還是比較低的。

 這裏我們可以通過上面直接使用maven命令指定參數的方式
mvn sonar:sonar -Dsonar.projectKey=springBoot-jvm -Dsonar.host.url=http://localhost:9000 -Dsonar.login=1b909feb90d33749662021ffdf4f959f5a5a4bc7,這種方式可以獨立運行檢測,不用和其他操作同步進行,可以實現週期性掃描。而且也可以通過配置將檢測文件上傳至SonarQube平臺。

 其實這款工具大部分使用方法在文檔裏面都可以找到,大家有興趣可以從之前我貼出來的地址找到官方文檔去查看。這裏我把Maven代碼掃描的文檔貼出來給大家參考【sonarscanner-for-maven】

5.總結

 現在這個互聯網環境比起兩三年前可以說是發展太迅速了,各種強大的工具、技術層出不窮。我們爲了在這場賽跑中領先,只能不停地去學習新的技術。但是無論如何我們都不能夠放下那些疊高樓的地基,而好的代碼規範不僅僅是我們在這個賽場的底氣,也是我們在整個互聯網開發生涯中的一把利器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章