一. 簡介
Sonar是一個用於代碼質量管理的開放平台,相信大家都不會陌生。Sonar可以集成不同的測試工具,代碼分析工具,以及持續集成工具。官方網站https://www.sonarqube.org
二. Sonar的三種用法
- 編寫代碼時做實時代碼檢查,有問題直接IDE里提示。參考https://www.sonarlint.org
- 提交代碼自動觸發檢測+輔助code review。插件說明:https://gitlab.talanlabs.com/gabriel-allaigre/sonar-gitlab-plugin
- 定時全局代碼檢測
這三種方法分別發生在代碼開發的3個時間階段。很容易看到,第1種方式實際上是效率最高的。也推薦大家在自己的IDE里裝上這個插件,將bug和不合規的代碼扼殺在搖籃中。第3種用法則是一種事后的問題曝光,當發現時bug很可能已經進入master分支。如果沒有前面2種用法,bug會持續不斷的進入master分支,也缺乏對開發人員的有效提醒。
這篇文章主要說的是第二種方法
三. 為你的工程開啟gitlab pipelines
1. 確保你有工程的master權限
2. 若看不見Settings/CICD這一欄,需要先打開Settings/General,確保Sharing and permissions 下的Pipelines不是disable的狀態
3. 打開http://git.51.nb/你的工程地址/settings/ci_cd,並Enable sonar runner
4. 在工程根目錄添加.gitlab-ci.yml文件(dev分支):
sonar: stage: test script: - ~/sonar.sh tags: - sonar
四. 使用場景
場景1:提交代碼自動掃描(注意,只掃描更改的文件),郵件通知作者本次提交有bug需要改

點擊鏈接查看,sonar會自動在代碼里加comment:
最下方展示該提交文件其他bug:
Sonar自動給你的gitlab添加todos:
場景2:merge request,code review,若存在bug,審核者可選擇不予通過
場景3:每次掃描全部代碼
.gitlab-ci.yml文件內容:
sonar: stage: test script: - ~/sonar.sh -a tags: - sonar
場景4:特定分支掃描
.gitlab-ci.yml文件內容:
sonar: stage: test script: - ~/sonar.sh tags: - sonar only: - master - release - dev
場景5:查看問題+定制化
在gitlab上系統的查看問題還是比較麻煩,我們可以進入http://10.247.22.137:9000/projects 查看問題。注意,這個是為gitlab提交自動掃描專門搭建的最新版的sonar,不同於公司現在用的sonar.51.nb:9000。如果覺得問題檢測對於自己的代碼塊是誤報,在經過直屬上級的評估后可以將此規則基於該項目降級。
五. 要求
- 對於p0,p1的java應用,強烈建議開啟以上代碼檢測!
- 其他級別的應用視情況開啟即可
六. 后續計划
- 任務由單機改為docker化,提升性能。
- 和ares平台打通
結語
相信閱讀本文的各位開發同學都不想僅限於代碼的搬運工,Sonar就像是個代碼經驗極其豐富的老師,他會任勞任怨的幫助我們完善自己代碼,讓我們的code變得更健壯、更規范、更優雅。雖然有時候某些issue看上去不是什么大問題,但即使只是防御代碼,也會有它的價值所在。希望大家都能成為有“代碼潔癖”的程序猿
