C#語言接入Sonar代碼靜態掃描相較於Java、Python來講,相對麻煩一些。Sonar檢測C#代碼時須要預先編譯,並且C#代碼必須用MSbuid進行編譯,若是須要使用SonarQube對C#進行代碼質量分析,則須要下載Sonar-Scanner-MSBuild和MSBuild,其中要求MSBuild在V14.0以上。mysql
一、下載SonarQube Scanner for MSBuild,它是C# Framework的Sonar分析插件。git
下載地址:sonar-scanner-msbuild-4.3.1.1372github
二、下載並解壓以後,設置SonarQube Scanner for MSBuild的環境變量。web
例如個人解壓路徑是:C:\Users\Administrator\Downloads\sonar-scanner-msbuild-4.3.1.1372-net466,則把該路徑添加到Path下。
SonarQube Scanner for MSBuild解壓目錄以下圖所示:sql
<?xml version="1.0" encoding="utf-8" ?> <!-- This file defines properties which would be understood by the SonarQube Scanner for MSBuild, if not overridden (see below) By default the SonarScanner.MSBuild.exe picks-up a file named SonarQube.Analysis.xml in the folder it is located (if it exists). It is possible to use another properties file by using the /s:filePath.xml flag The overriding strategy of property values is the following: - A project-specific property defined in the MSBuild *.*proj file (corresponding to a SonarQube module) can override: - A property defined in the command line (/d:propertyName=value) has which can override: - A property defined in the SonarQube.Analysis.xml configuration file [this file] which can override: - A property defined in the SonarQube User Interface at project level which can override: - A property defined in the SonarQube User Interface at global level which can't override anything. Note that the following properties cannot be set through an MSBuild project file or an SonarQube.Analysis.xml file: sonar.projectName, sonar.projectKey, sonar.projectVersion The following flags need to be used to set their value: /n:[SonarQube Project Name] /k:[SonarQube Project Key] /v:[SonarQube Project Version] --> <SonarQubeAnalysisProperties xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.sonarsource.com/msbuild/integration/2015/1"> <Property Name="sonar.host.url">http://sonar_ip:sonar_port</Property> <Property Name="sonar.login">login_username</Property> <Property Name="sonar.password">login_password</Property> <!-- Required only for versions of SonarQube prior to 5.2 --> <Property Name="sonar.jdbc.url">jdbc:mysql://db_ip:db_port/sonar?useUnicode=true;characterEncoding=utf8;rewriteBatchedStatements=true;useConfigs=maxPerformance;useSSL=false</Property> <Property Name="sonar.jdbc.username">jdbc.username</Property> <Property Name="sonar.jdbc.password">jdbc.password</Property> </SonarQubeAnalysisProperties>
Visual Studio IDE在編譯*.sln解決方案時默認是調用msbuild.exe來實現的。若是你的機器上沒有裝有Visual Studio,那麼也能夠單獨使用MSBuild來編譯.sln(工程解決方案)或.csproj(項目)。MSBuild能夠直接經過.NETFramework來安裝得到。windows
msbuild.exe的路徑通常以下:服務器
X86: C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe X64: C:\Program Files (x86)\MSBuild\14.0\Bin\amd64\MSBuild.exe
msbuild.exe 目錄以下所示:dom
將MSBuild.exe添加到Path環境變量,便於後面在命令行中調用MSBuild。ide
msbuild經常使用編譯命令:工具
MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release MSBuild MyApp.csproj /t:Clean /p:Configuration=Debug;/p:Platform=x86;TargetFrameworkVersion=v3.5 編譯爲 Release 代碼 -p:configuration="release" 清理項目 -t:clean 從新編譯 -t:rebuild 編譯項目 -t:build 默承認以忽略這個參數 發佈 -t:Publish 注意:這裏的 -t 和 /t 做用是相同的。
一、打開CMD,切換到指定的項目根目錄,必須和.sln或者.csproj同級目錄。例如以\hcloud\Common\KDY.WebApi.Core項目爲例,以下圖所示。
二、使用MSBuild方式進行Sonar Scanner掃描代碼前期準備文件生成,CMD命令下運行:
SonarScanner.MSBuild.exe begin /k:"hcloud.Common.KDY.WebApi.Core" /n:"hcloud.Common.KDY.WebApi.Core" /v:"1.0"
命令執行結果以下:
執行上述命令後,在項目目錄下,生成.sonarqube目錄。
三、經過MSBuild命令編譯項目,在CMD命令行下執行:
MSBuild.exe /t:Rebuild (默認爲Debug模式) 或者 MSBuild.exe /t:Rebuild /p:Configuration=Release (指定編譯模式) 或者 MSBuild.exe D:\hcloud\Common\Common.sln /t:Rebuild (指定具體的.sln解決方案)
編譯項目運行結果以下所示:
0個錯誤,則表明MSBuild編譯成功,編譯成功後,在當前目錄下會生成一個obj目錄。(編譯成功後默認生成Debug產物),SonarQube分析C#項目工程時,前提須要MSBuild能預編譯成功,若是存在錯誤,則沒法成功完成後續Sonar分析動做。
四、分析C#掃描結果,將分析報告上傳給SonarQube,CMD命令下運行:
SonarScanner.MSBuild.exe end
執行結果以下圖所示:
舒適提示:
五、查看Sonar分析掃描後的結果,訪問http://10.0.0.147:9000/dashboard?id=hcloud.Common.KDY.WebApi.Core,分析結果以下圖所示:
一、編譯.NET(C#)應用程序可經過微軟提供的MSBuild工具,先安裝插件MSBuild,在Jenkins中搜索並安裝MSBuild插件,以下圖所示。
二、插件安裝完畢後,進入系統管理->全局工具配置(Global Tool Configuration)找到MSBuild配置選項,以下圖所示。
三、配置SonarScanner for MSBuild,以下圖所示。
四、因爲示例中的Jenkins服務是部署在Linux系統中,故此處可添加一臺Windows主機(10.0.0.148)做爲C#項目編譯運行環境,在Windows從節點配置中,添加並配置相應工具,以下圖所示。
五、新建並配置JOB,添加JOB運行節點(編譯C#工程項目的運行機),以下圖所示。
六、配置源碼管理及其它所需配置(較爲簡單,此處省略)後,添加並配置構建選項,以下圖所示。
七、JOB構建運行結果以下圖所示。
八、JOB構建成功後,Sonar代碼分析報告以下圖所示。
一、解決SonarQube檢測C#執行成功,但不能獲取檢測結果的問題,現象以下圖所示。
由圖中能夠看到文件掃描成功了,可是卻沒有任何文件被發現,全部的指標數據皆爲0。
解決方案:
將Sonar插件中的C#插件改成5.9的版本便可。修改方式將plugin目錄下本來的C#插件刪除掉,將5.9版本的插件放入進來。重啓SonarQube後問題便可解決。(備註示例中的SonarQube版本爲6.7.5)
plugin目錄替換後以下圖所示:
二、Jenkins +MSBuild+Sonar構建編譯Job時提示Running the Scanner for MSBuild under Local System or Network Service account is not supported. Please, use a local or domain user account instead.
現象以下圖所示:
解決方法:
登陸從節點10.0.0.148(windows主機),右擊個人電腦選擇管理而後從管理界面裏面找到服務或者在cmd界面輸入services.msc打開服務管理界面,從服務管理界面找到jenkins slave服務,右鍵點擊屬性,在彈出的對話框中切換到登錄標籤,默認登陸方式爲本地系統賬號,此處咱們選擇此帳戶。而後輸入帳戶和密碼點擊肯定,完成以上操做之後從新啓動jenkins slave服務而後再從新執行便可。
修改方式以下圖所示:
三、Jenkins單獨構建沒問題,Sonar靜態檢查代碼單獨執行也沒問題,可是Jenkins+Sonar集成時出現未經受權問題,現象以下圖所示。
解決方案:
緣由是因爲Jenkins上已經經過admin生成了Token來進行鏈接認證,須要註釋掉SonarQube.Analysis.xml裏面的sonar.login和sonar.password,刪除或者註釋後,再從新執行便可。
修改以下圖所示(下圖採用註釋來解決該問題的)。
原文連接發表於筆者公衆號內:一文搞定SonarQube接入C#(.NET)代碼質量分析
感興趣的能夠關注筆者公衆號:技術大全(mikezhou_talk)