原來代碼的質(zhì)量也可以被檢測:初探 SonarQube
前言
最近在自學 DevOps 的過程中,發(fā)現(xiàn)除了要了解基本的 CI/CD 流程外,更重要的是了解可以利用哪些工具來輔助整個 CI 的流程,今天來介紹一個好用的代碼檢測平臺:SonarQube。
雖然在現(xiàn)今的開發(fā)很多時候都會藉由 code review 搭配各式的 linter 進行開發(fā),但百密總有一疏,這時候就可以透過 SonarQube 幫助開發(fā)者檢查一些潛在的 bug,這些 bug 有可能在開發(fā)時 linter 并沒有報錯,而且在 code review 時可能也不小心漏看了,假如可以在 CI 的流程中加上 SonarQube 來掃描整個 codebase,這時候就可以讓整個項目的代碼有更高的品質(zhì)。
什么是 SonarQube
SonarQube 是一套基于 Java 開發(fā)的代碼檢測以及質(zhì)量管理平臺,由于這套工具是用 Java 開發(fā)的原因,所以大家要先記得去安裝 **Java Development Kit(JDK)**,這樣后續(xù)才能順利的啟動 SonarQube。
SonarQube 也提供了不少的服務像是:
- 網(wǎng)頁化操作
- 支持非常多種程序語言的分析檢測
- 提供代碼重復性、潛在 bug、測試覆蓋率等等相關報告
- 提供自動化分析并且結合主流的 CI 工具
- 提供代碼改善建議
- 整合 JIRA、Mantis、LDAP、Fortify 等外部工具
- 提供歷史紀錄以利于后續(xù)追蹤
由于 SonarQube 提供太多種服務了,這里只列出幾點個人覺得最值得提出來與大家分享的內(nèi)容,有興趣的讀者可以再自行去官網(wǎng)上面進行相關的資料閱讀。
啟動 SonarQube
由于我是使用 mac 系統(tǒng),因此這邊以 mac 的操作方式進行介紹,首先可以在終端機中進入 /bin/macosx-unversal-64 的文件夾,并下 ./sonar.sh start 這個指令啟動 SonarQube 的服務。
啟動服務后可以在瀏覽器打上 localhost:9000 即可開啟 SonarQube 的網(wǎng)頁,預設的帳號及密碼都是 admin ,輸入后即可在 local 端開始使用 SonarQube 提供的檢測服務嘍。
SonarQube 操作說明
登入后就可以開始進行 Project 創(chuàng)建了,這邊的 Project 主要是方便開發(fā)者可以進行項目品質(zhì)的控管,創(chuàng)立好 Project 才可以開始針對想要檢測的 repository 進行檢測。
我們也可以看到 SonarQube 整合了非常多用來創(chuàng)建項目的主流工具例如 GitHub、Jira 等等,假如讀者本身是有在使用這些工具進行項目的管理也可以直接整合現(xiàn)有的架構,這邊為了方便介紹所以選擇手動創(chuàng)建 Project。
建立好 Project 后可以看到 SonarQube 也支持許多主流平臺的 CI 機制,這里也是為了方便介紹所以選擇手動測試 local repository。
想要進行分析檢測之前還需要產(chǎn)生一組 private token,利用這組 token 我們在之后進行檢測時可以確保檢測的結果會擺在這個 project 內(nèi)。
之后就可以選擇要檢測的代碼是屬于哪種語言以及目前電腦的 OS,都選擇完后可以去官網(wǎng)上下載最重要的分析工具 SonarScanner,這套 scanner 就是負責檢測代碼的工具。
下載完后就可以複制下方的指令進行代碼的檢測啦!
SonarScanner 檢測結果
在上面的步驟檢測完后,我們回到 SonarQube 的平臺就可以看到剛剛建立的 project 已經(jīng)有了初步的檢測報告,假如代碼都沒有什麼潛在的問題就可以看到報告會是綠色 Passed 的狀態(tài)。
但假如代碼有潛在的問題,這時候報告就會出現(xiàn)紅色的 Failed 并且指出有幾個 bug 產(chǎn)生。
接著點擊 issues tab 就可以看到目前潛在的 bug 是從哪個檔案的哪一行中產(chǎn)生。
再點進去后就會看到潛在的 bug 的錯誤訊息,我們可以發(fā)現(xiàn) array 的長度一定會是大于等于 0 可是我這邊卻寫了小于 0,所以這個 if 判斷條件永遠都不會通過。
但我們回到代碼后可以發(fā)現(xiàn)即便我們有安裝 linter 也不會檢查出這種看起來就是有問題的寫法,因為 linter 通常都是在檢查語法上的錯誤,這時候 SonarScanner 就幫助了我們可以進行更深入的檢查。
SonarScanner 配置
其實 SonarScanner 也可以進行一些自定義的配置,這時候就需要建立一個叫 sonar-project.properties 的文件,這份文件裡面可以設定一些 SonarScanner 提供的 analysis parameter,由于這些配置參數(shù)實在是太多了,所以這里不會一一介紹,有興趣的讀者可以參考官網(wǎng),裡面有所有參數(shù)的詳細介紹,整體寫法會像下圖這樣:
總結
這次介紹了 SonarQube 這套代碼檢測平臺,由于筆者本身是一位前端工程師,因此只會利用 ESLint 或者 TSLint 進代碼但程式碼還會有一些潛在的 bug 可能是這些 linter 無法檢查出來的,這時候 SonarQube 就起了一個很大的作用,幫助我們在開發(fā)時可以進行更深入的解析,假如讀者未來有要做一些 CI 流程的話,不妨也可以把 SonarQube 考慮進去喔。
作者:Andy Chen
譯者:小智
來源:medium
原文:https://medium.com/starbugs/%E5%8E%9F%E4%BE%86%E7%A8%8B%E5%BC%8F%E7%A2%BC%E5%93%81%E8%B3%AA%E4%B9%9F%E5%8F%AF%E4%BB%A5%E8%A2%AB%E6%AA%A2%E6%B8%AC-%E5%88%9D%E6%8E%A2-sonarqube-14e99687806e