SonarQube 搭建代碼質(zhì)量管理平臺(tái)(二)

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

從官方文檔的 Scanners 部分可以看出,Scanner 支持 MSBuild、Maven、Gradle、Ant、Jenkins 等。本文將介紹使用 Jenkins 進(jìn)行自動(dòng)化代碼分析, 測(cè)試項(xiàng)目的代碼基于 .NET 開發(fā),所以會(huì)用到 MSBuild 相關(guān)命令。

安裝 Jenkins

根據(jù)操作系統(tǒng) 下載 Jenkins,我使用的是 Windows ,直接都下一步就可以了。

Windows 環(huán)境下 Jenkins 安裝后默認(rèn)登錄身份是 “本地系統(tǒng)”,會(huì)無法訪問,所以需要修改登錄身份,我這里使用的是賬戶方式

Jenkins 登錄身份

啟動(dòng)成功后訪問 http://localhost:8080/

Jenkins 配置 Github

  1. 在 Github 生成 Personal access tokens,設(shè)置 token 相關(guān)權(quán)限

    access token

    access token scope
  2. Jenkins 配置 GitHub Server

    Jenkins 安裝后默認(rèn)已包含 GitHub,在 “系統(tǒng)管理” => “系統(tǒng)設(shè)置” 中找到 Github,然后在 Credentials 處添加全局憑據(jù),類型選 Secret text,Secret 處輸入上一步生成的 access token

    GitHub Server
    Secret text

添加完成后可點(diǎn)擊 Test connection 進(jìn)行測(cè)試

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

Jenkins 配置 SonarQube

  1. 在 SonarQube 中生成 Server authentication token

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

    SonarQube token

    重新進(jìn)入這個(gè)頁(yè)面之前生成的 token 就看不到的,只能看到一次,我呵呵

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

  3. 配置 SonarQube Sever,這部分和配置 GitHub Server 類似,在 “系統(tǒng)管理” => “系統(tǒng)設(shè)置” 中找到 SonarQube servers
    Name:隨意;
    Server URL:為啟動(dòng)的 SonarQube 服務(wù)地址,我這里使用本地啟動(dòng)的默認(rèn)地址 http://localhost:9000 ;
    Server authentication token: 輸入之前生成的 token;

    SonarQube server
  4. 配置 SonarScanner for MSBuild

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

    SonarScanner for MSBuild

Jenkins 任務(wù)配置

上面是 Jenkins 的一些全局配置,下面需要對(duì)單個(gè)任務(wù)進(jìn)行配置。新建一個(gè) “構(gòu)建一個(gè)自由風(fēng)格的軟件項(xiàng)目” 類型的任務(wù) “Test”

配置項(xiàng)目的倉(cāng)庫(kù)地址,這個(gè)項(xiàng)目就是要進(jìn)行代碼分析的項(xiàng)目,在 Credentials 處添加憑據(jù),這里添加一個(gè)用戶名密碼類型的憑據(jù)(其他類型的也可以,能訪問這個(gè)倉(cāng)庫(kù)即可)。在添加憑據(jù)后,會(huì)自動(dòng)檢測(cè)是否有效,如果無效會(huì)直接出現(xiàn)錯(cuò)誤提示

Task Config
Username with password

在 “構(gòu)建” 中增加構(gòu)建步驟:

Build steps
  1. SonarScanner for MSBuild - Begin Analysis

    SonarScanner for MSBuild:選擇基于 .NET Framework,因?yàn)?Test 項(xiàng)目是基于 .NET Framework;
    Project key: 在 SoanrQube 中的項(xiàng)目 key;
    Project name:在 SoanrQube 顯示的項(xiàng)目名稱,如果不填,則顯示 Project key;
    Project version:版本號(hào);
    Additional arguments:其他參數(shù),比如可以設(shè)置只檢測(cè)某種語(yǔ)言(/d:sonar.language=cs)、排除哪些文件(夾) 等,參考;

  2. 執(zhí)行 Windows 批處理命令

    先通過 nuget restore(如果沒有安裝 nuget 命令的需要提前安裝) 還原依賴的 NuGet 包,然后使用 MSBuild 批處理命令重新生成項(xiàng)目。這一步 Build 可能會(huì)出現(xiàn)各種奇葩的問題,主要就是少了一些依賴包,建議在安裝 Jenkins 的機(jī)器安裝上 VS,然后將 MSBuild 加入環(huán)境變量,我的機(jī)器添加了兩個(gè)路徑:

    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
    C:\Program Files (x86)\NuGet
    
  3. SonarScanner for MSBuild - End Analysis

配置完成后保存,然后點(diǎn)擊 “立即構(gòu)建” 試試效果,構(gòu)建成功后我們將通過 SonarQube UI 看到對(duì) Test 項(xiàng)目的分析結(jié)果

Analysis result

這就實(shí)現(xiàn)了將 Jenkins 與 SonarQube 關(guān)聯(lián)起來,代碼構(gòu)建完成后會(huì)把結(jié)果發(fā)送到 SonarQube 中,我們還可以根據(jù)需要在 Jenkins 任務(wù)中設(shè)置構(gòu)建執(zhí)行時(shí)間,比如每天早上9點(diǎn)執(zhí)行一次

Trigger time

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

參考鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容