SonarQube 搭建程式碼質量管理平臺(二)
通過 ofollow,noindex">SonarQube 搭建程式碼質量管理平臺(一) 的介紹,如果每次都需要手動執行 sonar-scanner ,想想也是醉了,所以我們需要進一步完善 SonarQube 進行自動化程式碼分析。
從官方文件的 Scanners 部分可以看出,Scanner 支援 MSBuild、Maven、Gradle、Ant、Jenkins 等。本文將介紹使用 Jenkins 進行自動化程式碼分析, 測試專案的程式碼基於 .NET 開發,所以會用到 MSBuild 相關命令。
安裝 Jenkins
根據作業系統 下載 Jenkins ,我使用的是 Windows ,直接都下一步就可以了。
Windows 環境下 Jenkins 安裝後預設登入身份是 “本地系統”,會無法訪問,所以需要修改登入身份,我這裡使用的是賬戶方式
啟動成功後訪問 http://localhost:8080/
Jenkins 配置 Github
-
在 Github 生成 Personal access tokens,設定 token 相關許可權
-
Jenkins 配置 GitHub Server
Jenkins 安裝後預設已包含 GitHub,在 “系統管理” => “系統設定” 中找到 Github,然後在 Credentials 處新增全域性憑據,型別選 Secret text,Secret 處輸入上一步生成的 access token
新增完成後可點選 Test connection 進行測試
如果使用的是 Gitlab,需要在 Jenkins 中安裝 Gitlab 外掛,全域性憑據新增 GitLab API token,token 使用 Gitlab Account 下的 Private token, 其他配置基本類似
Jenkins 配置 SonarQube
-
在 SonarQube 中生成 Server authentication token
登入 SonarQube 後,在 “My Account” => “Securiy” 中生成 toekn
重新進入這個頁面之前生成的 token 就看不到的,只能看到一次,我呵呵
-
在 Jenkins 的管理外掛中安裝 SonarQube Scanner 外掛
-
配置 SonarQube Sever,這部分和配置 GitHub Server 類似,在 “系統管理” => “系統設定” 中找到 SonarQube servers
Name:隨意;
Server URL:為啟動的 SonarQube 服務地址,我這裡使用本地啟動的預設地址 http://localhost:9000 ;
Server authentication token: 輸入之前生成的 token;
-
配置 SonarScanner for MSBuild
在 “系統管理” => “全域性工具配置” 找到 SonarScanner for MSBuild(
測試專案是基於 .NET ),官方提供了 .NET Framework 和 .NET Core 兩個版本,我們可以先都加上,之後根據實際專案選擇使用哪個。有兩中方式配置 MSBUILD_SQ_SCANNER_HOME,可以選擇自動安裝或手動配置,手動配置需要單獨下載,我使用的是手動配置方式
Jenkins 任務配置
上面是 Jenkins 的一些全域性配置,下面需要對單個任務進行配置。新建一個 “構建一個自由風格的軟體專案” 型別的任務 “Test”
配置專案的倉庫地址,這個專案就是要進行程式碼分析的專案,在 Credentials 處新增憑據,這裡新增一個使用者名稱密碼型別的憑據( 其他型別的也可以,能訪問這個倉庫即可 )。在新增憑據後,會自動檢測是否有效,如果無效會直接出現錯誤提示
在 “構建” 中增加構建步驟:
-
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:其他引數,比如可以設定只檢測某種語言(/d:sonar.language=cs)、排除哪些檔案(夾) 等, 參考 ;
-
執行 Windows 批處理命令
先通過 nuget restore( 如果沒有安裝 nuget 命令的需要提前安裝 ) 還原依賴的 Nuget 包,然後使用 MSBuild 批處理命令重新生成專案。這一步 Build 可能會出現各種奇葩的問題,主要就是少了一些依賴包,建議在安裝 Jenkins 的機器安裝上 VS,然後將 MSBuild 加入環境變數,我的機器添加了兩個路徑:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin C:\Program Files (x86)\NuGet
-
SonarScanner for MSBuild - End Analysis
配置完成後儲存,然後點選 “立即構建” 試試效果,構建成功後我們將通過 SonarQube UI 看到對 Test 專案的分析結果
這就實現了將 Jenkins 與 SonarQube 關聯起來,程式碼構建完成後會把結果傳送到 SonarQube 中,我們還可以根據需要在 Jenkins 任務中設定構建執行時間,比如每天早上9點執行一次
SonarQube 中有 Webhook 的功能,當接收到一次提交,可以將這次的分析結果傳送給設定的 Webhook 地址,這樣我們可以通過訊息(比如簡訊、郵件、微信等)將有問題的分析結果及時的通知到相關負責人