SonarQube系列二、分析dotnet core/C#代码
來(lái)源:https://www.cnblogs.com/7tiny/p/11342902.html
【前言】
本系列主要講述sonarqube的安裝部署以及如何集成jenkins自動(dòng)化分析.netcore項(xiàng)目。目錄如下:
SonarQube系列一、Linux安裝與部署
SonarQube系列二、分析dotnet core/C#代碼
SonarQube系列三、如何集成jenkins實(shí)現(xiàn)分析自動(dòng)化
【實(shí)現(xiàn)功能】
這篇文章將要介紹的主要內(nèi)容如下:
sonarqube分析.netcore項(xiàng)目下的C#代碼
sonarqube生成單元測(cè)試報(bào)告(代碼覆蓋率)
【SonarQube分析C#代碼】
1.sonarqube賬號(hào)token的生成
sonarqube支持生成用戶token,以便在命令行或者腳本中使用token代表賬號(hào)操作sonarbue,避免造成賬號(hào)密碼的泄露。
點(diǎn)擊sonarqube首頁(yè)右上角頭像,進(jìn)入我的賬號(hào)
然后進(jìn)入安全tab頁(yè),隨便輸入個(gè)標(biāo)識(shí),點(diǎn)擊生成,生成一個(gè)賬號(hào)專屬的token
生成的token只會(huì)顯示一次,且后續(xù)無(wú)法查詢,因此先把他手動(dòng)備份下來(lái),后續(xù)會(huì)用到。
2.安裝netcore分析器
分析netcore項(xiàng)目,微軟和sonar一起協(xié)作做了很多工作,大大簡(jiǎn)化了我們的工具使用,官網(wǎng)可以查看相關(guān)工具及命令:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/
我們按照官方提示,找到 MSBuild .NET Core Global Tool ,直接安裝dotnet全局工具
dotnet tool install --global dotnet-sonarscanner --version 4.3.1安裝完后,我們把我們的sonar的token注入到該命令的配置中,以便在執(zhí)行命令時(shí)自動(dòng)關(guān)聯(lián)到對(duì)應(yīng)賬戶的sonar。
在dotnet tool的安裝目錄下,找到一個(gè)叫 SonarQube.Analysis.xml 的配置文件。
我的xml在該目錄下:/root/.dotnet/tools/.store/dotnet-sonarscanner/4.6.2/dotnet-sonarscanner/4.6.2/tools/netcoreapp2.1/any
然后我們?cè)趯?duì)應(yīng)節(jié)點(diǎn)將 sonarweb 的地址和 token 填寫上即可。
當(dāng)然如果不配置也是可以的,那么就需要每次執(zhí)行命令時(shí)將token一起當(dāng)作參數(shù)填寫,肯定是不如一次性配置好方便的。
3.開(kāi)始分析代碼
首先隨便找個(gè)項(xiàng)目,這個(gè)就不多說(shuō)了。有了代碼以后然后進(jìn)入代碼目錄,依次輸入下面命令:
開(kāi)始命令,下面命令已經(jīng)備注了三個(gè)參數(shù)的用途
dotnet sonarscanner begin /k:這里填SonarQube將要生成的項(xiàng)目的唯一編碼 /n:sonarqube中將要顯示的項(xiàng)目名稱 /v:當(dāng)前執(zhí)行活動(dòng)號(hào)(可以動(dòng)態(tài)遞增或使用時(shí)間戳)編譯命令,build 后面的參數(shù)為 dotnet core 項(xiàng)目的 xxx.sln 文件的完整路徑
dotnet build xxx.csproj分析并將分析結(jié)果推送到sonarqube站點(diǎn)
dotnet sonarscanner end例如:
dotnet sonarscanner begin /k:SevenTiny.Bantina /n:SevenTiny.Bantina /v:11dotnet build 20-Solution/SevenTiny.Bantina.sln
dotnet sonarscanner end
經(jīng)過(guò)一段時(shí)間以后,可以看到輸入日志已經(jīng) push 到 sonarqube 站點(diǎn)成功,那么就可以去 sonarqube 站點(diǎn)查看結(jié)果了,項(xiàng)目會(huì)通過(guò) api 自動(dòng)創(chuàng)建。
上述步驟并不會(huì)有覆蓋率,先忽略,我們后面會(huì)繼續(xù)講解如何提供單元測(cè)試覆蓋率。
我們點(diǎn)擊標(biāo)題進(jìn)入項(xiàng)目詳情頁(yè):
這里主要報(bào)告了幾個(gè)指標(biāo)(sonar有默認(rèn)標(biāo)準(zhǔn),如果不達(dá)標(biāo)會(huì)報(bào)警,例如頂端紅色錯(cuò)誤提示):
Bugs 漏洞:代碼中的重大漏洞,可能影響到項(xiàng)目的正常運(yùn)行,急需改正;
異味:無(wú)關(guān)緊要的編碼不規(guī)范問(wèn)題,建議改正,一般不會(huì)影響功能,點(diǎn)開(kāi)詳細(xì)信心可以看到規(guī)范的使用案例,對(duì)規(guī)范自己的變成水平有相當(dāng)大的幫助;
覆蓋率:項(xiàng)目的單元測(cè)試情況;
重復(fù):項(xiàng)目中的重復(fù)代碼塊,建議重構(gòu);
sonarqube 還提供了很多圖表來(lái)展示多維度的代碼分析情況。
【添加單元測(cè)試信息】
經(jīng)過(guò)上述步驟并不能實(shí)現(xiàn)單元測(cè)試的結(jié)果展示,事實(shí)上,sonarqube 本身也辦不到對(duì)單元測(cè)試的分析,通常的做法是將其他工具生成的單元測(cè)試結(jié)果整合到 sonarqube 中,借助 sonarqube 來(lái)更好地展示單元測(cè)試結(jié)果。
首先我們的項(xiàng)目要有專門的單元測(cè)試項(xiàng)目,并且規(guī)范地使用 Assert 等單元測(cè)試語(yǔ)句對(duì)項(xiàng)目代碼進(jìn)行了單元測(cè)試。
1.使用?coverlet 分析單元測(cè)試覆蓋率
在單元測(cè)試項(xiàng)目安裝?coverlet.msbuild?nuget包(單測(cè)項(xiàng)目,不是正式的項(xiàng)目),這種方式便于和dotnet test命令集成。這種方式下, 當(dāng)它被啟用后, 它會(huì)集成到dotnet test 這個(gè)命令架構(gòu)里, 在測(cè)試運(yùn)行后自動(dòng)生成覆蓋率報(bào)告.
2.通過(guò) dotnet test 命令輸出單元測(cè)試結(jié)果
dotnet test 是 dotnet 默認(rèn)的集成工具,用于執(zhí)行單元測(cè)試項(xiàng)目并輸出測(cè)試結(jié)果。
執(zhí)行命令
dotnet test xxxtest.csproj --logger:"trx;LogFileName=test.trx" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/'上述命令指定了某個(gè)測(cè)試項(xiàng)目,并輸出測(cè)試結(jié)果為 test.trx 文件,同時(shí)輸出單元測(cè)試覆蓋率分析文件為 opencover 格式的文件。
也就是說(shuō),上述命令會(huì)生成兩個(gè)文件,一個(gè)是單測(cè)的結(jié)果,一個(gè)是單測(cè)覆蓋率的詳情描述 xml 文件。
3.將單測(cè)文件集成到sonarqube
打開(kāi) sonarqube 的單個(gè)項(xiàng)目設(shè)置(不是全局設(shè)置)
然后找到對(duì)應(yīng)語(yǔ)言的頁(yè)簽,當(dāng)然我們今天的語(yǔ)言是C#,找到單元測(cè)試覆蓋率 opencover 的設(shè)置區(qū)域,用通配符 ** 去匹配生成的單測(cè)覆蓋率文件。
還有單元測(cè)試報(bào)告文件設(shè)置
這樣下次執(zhí)行 dotnet sonarscanner 命令的時(shí)候,就會(huì)自動(dòng)把單元測(cè)試的相關(guān)文件輸出結(jié)果也推送到 sonarqube 中。
最后的結(jié)果也就是圖中展示的那樣,顯示出了項(xiàng)目代碼的單元測(cè)試覆蓋率,甚至是本次有提交新代碼的時(shí)候新代碼的單元測(cè)試覆蓋率,如果低于閾值(默認(rèn)80%)則會(huì)出現(xiàn)上面的報(bào)警:
點(diǎn)進(jìn)單元測(cè)試覆蓋率詳情頁(yè),我們可以看到更加詳細(xì)地對(duì)單元測(cè)試的描述,例如覆蓋了多少行代碼,漏掉了多少行代碼:
點(diǎn)開(kāi)具體的代碼行還可以看到那些行有單元測(cè)試的覆蓋,總之是非常詳盡了...
【擴(kuò)展】
SonarQube 如何排除不需要分析地代碼文件?
有些時(shí)候,引入了很多第三方的庫(kù)(尤其是web項(xiàng)目的jquery庫(kù)),我們并不需要對(duì)第三方引用的庫(kù)進(jìn)行分析(甚至?xí)驗(yàn)榘碾s七雜八的的各種語(yǔ)言腳本太多),那么我們就要將無(wú)關(guān)的代碼排除。
?打開(kāi)單獨(dú)項(xiàng)目的設(shè)置(非全局設(shè)置)
找到排除,可以采用通配符排除文件或文件夾,下面有通配符的使用介紹。
當(dāng)然了也可以指定哪些文件是需要包含的,這樣可以按需進(jìn)行分析。
-END-
看完本文的你是否有所收獲?
請(qǐng)轉(zhuǎn)發(fā)給更多人關(guān)注
【猿學(xué)圈】
提升IT技能~
長(zhǎng)按關(guān)注,謝謝轉(zhuǎn)發(fā)
學(xué)海無(wú)涯,別擔(dān)心,有我陪著你~
點(diǎn)個(gè)贊,讓我在心里記住你???
總結(jié)
以上是生活随笔為你收集整理的SonarQube系列二、分析dotnet core/C#代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 用ASP.NETCore构建可检测的高可
- 下一篇: ASP.NET Core快速入门(第2章