通過 SonarQube 搭建代碼質(zhì)量管理平臺(一) 的介紹腻窒,如果每次都需要手動執(zhí)行 sonar-scanner 谓谦,想想也是醉了继找,所以我們需要進一步完善 SonarQube 進行自動化代碼分析耕捞。
從官方文檔的 Scanners 部分可以看出,Scanner 支持 MSBuild竖幔、Maven板乙、Gradle是偷、Ant拳氢、Jenkins 等募逞。本文將介紹使用 Jenkins 進行自動化代碼分析, 測試項目的代碼基于 .NET 開發(fā)馋评,所以會用到 MSBuild 相關(guān)命令放接。
安裝 Jenkins
根據(jù)操作系統(tǒng) 下載 Jenkins,我使用的是 Windows 留特,直接都下一步就可以了纠脾。
Windows 環(huán)境下 Jenkins 安裝后默認登錄身份是 “本地系統(tǒng)”,會無法訪問蜕青,所以需要修改登錄身份苟蹈,我這里使用的是賬戶方式
啟動成功后訪問 http://localhost:8080/
Jenkins 配置 Github
-
在 Github 生成 Personal access tokens,設(shè)置 token 相關(guān)權(quán)限
access token
access token scope -
Jenkins 配置 GitHub Server
Jenkins 安裝后默認已包含 GitHub右核,在 “系統(tǒng)管理” => “系統(tǒng)設(shè)置” 中找到 Github慧脱,然后在 Credentials 處添加全局憑據(jù),類型選 Secret text贺喝,Secret 處輸入上一步生成的 access token
GitHub ServerSecret text
添加完成后可點擊 Test connection 進行測試
如果使用的是 Gitlab菱鸥,需要在 Jenkins 中安裝 Gitlab 插件,全局憑據(jù)添加 GitLab API token躏鱼,token 使用 Gitlab Account 下的 Private token氮采, 其他配置基本類似
Jenkins 配置 SonarQube
-
在 SonarQube 中生成 Server authentication token
登錄 SonarQube 后,在 “My Account” => “Securiy” 中生成 toekn
SonarQube token
重新進入這個頁面之前生成的 token 就看不到的染苛,只能看到一次鹊漠,我呵呵 在 Jenkins 的管理插件中安裝 SonarQube Scanner 插件
-
配置 SonarQube Sever,這部分和配置 GitHub Server 類似茶行,在 “系統(tǒng)管理” => “系統(tǒng)設(shè)置” 中找到 SonarQube servers
Name:隨意贸呢;
Server URL:為啟動的 SonarQube 服務(wù)地址,我這里使用本地啟動的默認地址 http://localhost:9000 拢军;
Server authentication token: 輸入之前生成的 token楞陷;SonarQube server -
配置 SonarScanner for MSBuild
在 “系統(tǒng)管理” => “全局工具配置” 找到 SonarScanner for MSBuild(
測試項目是基于 .NET),官方提供了 .NET Framework 和 .NET Core 兩個版本茉唉,我們可以先都加上固蛾,之后根據(jù)實際項目選擇使用哪個。有兩中方式配置 MSBUILD_SQ_SCANNER_HOME度陆,可以選擇自動安裝或手動配置艾凯,手動配置需要單獨下載,我使用的是手動配置方式SonarScanner for MSBuild
Jenkins 任務(wù)配置
上面是 Jenkins 的一些全局配置懂傀,下面需要對單個任務(wù)進行配置趾诗。新建一個 “構(gòu)建一個自由風格的軟件項目” 類型的任務(wù) “Test”
配置項目的倉庫地址,這個項目就是要進行代碼分析的項目,在 Credentials 處添加憑據(jù)恃泪,這里添加一個用戶名密碼類型的憑據(jù)(其他類型的也可以郑兴,能訪問這個倉庫即可)。在添加憑據(jù)后贝乎,會自動檢測是否有效情连,如果無效會直接出現(xiàn)錯誤提示
在 “構(gòu)建” 中增加構(gòu)建步驟:
-
SonarScanner for MSBuild - Begin Analysis
SonarScanner for MSBuild:選擇基于 .NET Framework,因為 Test 項目是基于 .NET Framework览效;
Project key: 在 SoanrQube 中的項目 key却舀;
Project name:在 SoanrQube 顯示的項目名稱,如果不填锤灿,則顯示 Project key挽拔;
Project version:版本號;
Additional arguments:其他參數(shù)但校,比如可以設(shè)置只檢測某種語言(/d:sonar.language=cs)篱昔、排除哪些文件(夾) 等,參考始腾; -
執(zhí)行 Windows 批處理命令
先通過 nuget restore(如果沒有安裝 nuget 命令的需要提前安裝) 還原依賴的 NuGet 包州刽,然后使用 MSBuild 批處理命令重新生成項目。這一步 Build 可能會出現(xiàn)各種奇葩的問題浪箭,主要就是少了一些依賴包穗椅,建議在安裝 Jenkins 的機器安裝上 VS,然后將 MSBuild 加入環(huán)境變量奶栖,我的機器添加了兩個路徑:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin C:\Program Files (x86)\NuGet
SonarScanner for MSBuild - End Analysis
配置完成后保存匹表,然后點擊 “立即構(gòu)建” 試試效果,構(gòu)建成功后我們將通過 SonarQube UI 看到對 Test 項目的分析結(jié)果
這就實現(xiàn)了將 Jenkins 與 SonarQube 關(guān)聯(lián)起來宣鄙,代碼構(gòu)建完成后會把結(jié)果發(fā)送到 SonarQube 中袍镀,我們還可以根據(jù)需要在 Jenkins 任務(wù)中設(shè)置構(gòu)建執(zhí)行時間,比如每天早上9點執(zhí)行一次
SonarQube 中有 Webhook 的功能冻晤,當接收到一次提交苇羡,可以將這次的分析結(jié)果發(fā)送給設(shè)置的 Webhook 地址,這樣我們可以通過消息(比如短信鼻弧、郵件设江、微信等)將有問題的分析結(jié)果及時的通知到相關(guān)負責人