Git+Maven+Sonar實現提交代碼前進行代碼的質量檢查
一、前言
為了規範代碼質量,使開發人員寫出更高質量的代碼,實踐了一下git-hooks中的pre-commit鉤子,可以在提交代碼時強制校驗本地代碼質量,若不符合指定規則不給予代碼的提交。
二、git的鉤子hook 介紹
和其它版本控制系統一樣,Git 能在特定的重要動作發生時觸發自定義腳本。有兩組這樣的鉤子:客戶端的和服務器端的。客戶端鉤子由諸如提交和合併這樣的操作所調用,而服務器端鉤子作用於諸如接收被推送的提交這樣的聯網操作。你可以隨心所欲地運用這些鉤子。
鉤子都被存儲在 Git 目錄下的 hooks 子目錄中。也即絕大部分項目中的 .git/hooks,默認存在的都是示例,其名字都是以 .sample 結尾,如果你想啟用它們,得先移除這個後綴。把一個正確命名且可執行的文件放入 Git 目錄下的 hooks 子目錄中,即可激活該鉤子腳本。這樣一來,它就能被 Git 調用。
本次方案實現效果就是通過pre-commit鉤子實現。
三、sonar的介紹
Sonar是一個用於代碼質量管理的開源平台,用於管理源代碼的質量,可以從七個維度檢測代碼質量。
通過插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十幾種編程語言的代碼質量管理與檢測。
3.1、sonar支持的客戶端
除了數據庫和web服務器之外,Sonar還有很重要的一部分:客戶端。客戶端使用具體的程序工具進行分析,不同的語言,不同的項目構建類型可以使用不同的客戶端程序。
Sonar提供很多類型的客戶端:
| 客戶端 | 說明 |
| Sonar Runner | 推薦默認客戶端 |
| Maven | 如果項目使用Maven構建推薦使用此種方式 |
| Ant | 如果項目使用ant構建則推薦 |
| CI Engine | 持續集成,比如Hudson,Jenkins |
本次正是通過Maven插件方式實現sonar掃描。
四、正文
4.1、在Java項目配置pom.xml
4.1.1、pom.xml中增加如下插件

4.1.2、該插件可以使得在install以後在git本地倉庫的.githooks目錄下生成一份自定義的pre-commit文件,該文件是git進行提交代碼執行的鉤子函數,函數內容在插件pre-commit中可以編寫,如下圖:


4.1.2、在pom文件繼續添加sonar相關的插件


該插件能夠使項目通過sonar:sonar命令實現項目的sonar掃描,其中sonar.login為登陸的token,sonar.host.url為sonar服務的URL,sonar.projectKey為自定義的項目Key(可選)
獲取token的辦法,首先通過登錄sonar服務器,再如下圖操作:

五、結果驗證
如圖所示,通過maven sonar:sonar命令可以對項目執行代碼質量掃描,如果出現如下結果證明這個sonar插件有效。

再打開sonar WBE端查看,可以看到項目的報告已經生成。

四、嘗試git提交代碼執行sonar
4.1、首先要通過mvn install 命令把鉤子腳本生成。
假設install項目成功了,打開項目所在的.githooks 目錄查看,將看到pre-commit 文件,打開文件查看會發現所編寫的腳本內容正是在githook-maven-plugin插件編寫的shell腳本內容,此時證明該插件已經生效。



可以看到上圖的腳本內容一致。
4.2、嘗試提交有異常的代碼:
在方法裡面提交有問題的代碼進行測試。

把有問題的代碼進行提交,因為替換了pre-commit文件, 所以在代碼提交前會執行pre-commit裡面的腳本,腳本首先通過對代碼進行 mvn sonar:sonar 命令操作,然後再調用shell命令curl獲取sonar的掃描報告,根據報告判斷是否可以提交代碼(詳細查看具體的shell腳本實現)


可以看到沒有辦法提交,符合設計。
再看正常代碼的情況

把錯誤代碼注釋掉,再次提交


報告為正常,可以正常提交。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/216503.html
微信掃一掃
支付寶掃一掃