西安青穗信息技術有限責任公司
主營產品: 安全軟件
SonarQube技術支持-正版購買-培訓-安裝-使用-價格-中國代理商
價格
訂貨量(套)
面議
≥1
店鋪主推品 熱銷潛力款
䀋䀔䀐䀐䀏䀍䀏䀐䀍䀒䀔
在線客服
通過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
在 Github 生成 Personal access tokens,設置 token 相關權限
access token
access token scope
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
在 SonarQube 中生成 Server authentication token
登錄 SonarQube 后,在 “My Account” => “Securiy” 中生成 toekn
SonarQube token 重新進入這個頁面之前生成的 token 就看不到的,只能看到一次,我呵呵
在 Jenkins 的管理插件中安裝 SonarQube Scanner 插件
配置 SonarQube Sever,這部分和配置 GitHub Server 類似,在 “系統管理” => “系統設置” 中找到 SonarQube serversName:隨意;Server URL:為啟動的 SonarQube 服務地址,我這里使用本地啟動的默認地址http://localhost:9000;Server authentication token:輸入之前生成的 token;
SonarQube server
配置 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
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
連續檢查
質量門
多語言
插件庫
優點
對于開發人員
用于DevOps
對于高管
配置完成后保存,然后點擊 “立即構建” 試試效果,構建成功后我們將通過 SonarQube UI 看到對 Test 項目的分析結果
Analysis result
這就實現了將 Jenkins 與 SonarQube 關聯起來,代碼構建完成后會把結果發送到 SonarQube 中,我們還可以根據需要在 Jenkins 任務中設置構建執行時間,比如每天早上9點執行一次
Trigger time
SonarQube 中有Webhook的功能,當接收到一次提交,可以將這次的分析結果發送給設置的 Webhook 地址,這樣我們可以通過消息(比如短信、郵件、微信等)將有問題的分析結果及時的通知到相關負責人。