SonarQube 搭建代碼質量管理平臺(二)

通過 SonarQube 搭建代碼質量管理平臺(一) 的介紹,如果每次都需要手動執行 sonar-scanner ,想想也是醉了,所以我們需要進一步完善 SonarQube 進行自動化代碼分析。

從官方文檔的 Scanners 部分可以看出,Scanner 支持 MSBuild、Maven、Gradle、Ant、Jenkins 等。本文將介紹使用 Jenkins 進行自動化代碼分析, 測試項目的代碼基於 .NET 開發,所以會用到 MSBuild 相關命令。

安裝 Jenkins

根據操作系統 下載 Jenkins,我使用的是 Windows ,直接都下一步就可以了。

Windows 環境下 Jenkins 安裝後默認登錄身份是 “本地系統”,會無法訪問,所以需要修改登錄身份,我這裏使用的是賬戶方式

Jenkins 登錄身份

啓動成功後訪問 http://localhost:8080/

Jenkins 配置 Github

  1. 在 Github 生成 Personal access tokens,設置 token 相關權限

    access token

    access token scope
  2. Jenkins 配置 GitHub Server

    Jenkins 安裝後默認已包含 GitHub,在 “系統管理” => “系統設置” 中找到 Github,然後在 Credentials 處添加全局憑據,類型選 Secret text,Secret 處輸入上一步生成的 access token

    GitHub Server
    Secret text

添加完成後可點擊 Test connection 進行測試

如果使用的是 Gitlab,需要在 Jenkins 中安裝 Gitlab 插件,全局憑據添加 GitLab API token,token 使用 Gitlab Account 下的 Private token, 其他配置基本類似

Jenkins 配置 SonarQube

  1. 在 SonarQube 中生成 Server authentication token

    登錄 SonarQube 後,在 “My Account” => “Securiy” 中生成 toekn

    SonarQube token

    重新進入這個頁面之前生成的 token 就看不到的,只能看到一次,我呵呵

  2. 在 Jenkins 的管理插件中安裝 SonarQube Scanner 插件

  3. 配置 SonarQube Sever,這部分和配置 GitHub Server 類似,在 “系統管理” => “系統設置” 中找到 SonarQube servers
    Name:隨意;
    Server URL:爲啓動的 SonarQube 服務地址,我這裏使用本地啓動的默認地址 http://localhost:9000
    Server authentication token: 輸入之前生成的 token;

    SonarQube server
  4. 配置 SonarScanner for MSBuild

    在 “系統管理” => “全局工具配置” 找到 SonarScanner for MSBuild(
    測試項目是基於 .NET),官方提供了 .NET Framework 和 .NET Core 兩個版本,我們可以先都加上,之後根據實際項目選擇使用哪個。有兩中方式配置 MSBUILD_SQ_SCANNER_HOME,可以選擇自動安裝或手動配置,手動配置需要單獨下載,我使用的是手動配置方式

    SonarScanner for MSBuild

Jenkins 任務配置

上面是 Jenkins 的一些全局配置,下面需要對單個任務進行配置。新建一個 “構建一個自由風格的軟件項目” 類型的任務 “Test”

配置項目的倉庫地址,這個項目就是要進行代碼分析的項目,在 Credentials 處添加憑據,這裏添加一個用戶名密碼類型的憑據(其他類型的也可以,能訪問這個倉庫即可)。在添加憑據後,會自動檢測是否有效,如果無效會直接出現錯誤提示

Task Config
Username with password

在 “構建” 中增加構建步驟:

Build steps
  1. 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)、排除哪些文件(夾) 等,參考

  2. 執行 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
    
  3. SonarScanner for MSBuild - End Analysis

配置完成後保存,然後點擊 “立即構建” 試試效果,構建成功後我們將通過 SonarQube UI 看到對 Test 項目的分析結果

Analysis result

這就實現了將 Jenkins 與 SonarQube 關聯起來,代碼構建完成後會把結果發送到 SonarQube 中,我們還可以根據需要在 Jenkins 任務中設置構建執行時間,比如每天早上9點執行一次

Trigger time

SonarQube 中有 Webhook 的功能,當接收到一次提交,可以將這次的分析結果發送給設置的 Webhook 地址,這樣我們可以通過消息(比如短信、郵件、微信等)將有問題的分析結果及時的通知到相關負責人

參考鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章