【前言】
本系列主要講述sonarqube的安裝部署以及如何集成jenkins自動化分析.netcore項目。目錄如下:
- SonarQube系列一、Linux安裝與部署
- SonarQube系列二、分析dotnet core/C#代碼
- SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)
【實現功能】
這篇文章將要介紹的主要內容如下:
- 將上一篇文章中的sonarqube命令整合為shell腳本
- 將 shell 腳本集成到jenkins中
【整合sonarqube命令為shell腳本】
因為使用的是 linux 服務器,因此,我們將上一篇文章中關於 sonarqube 的相關命令整合到 shell 腳本中,以便方便地調用,並且很容易集成到CI/CD工具中。
shell 腳本另一個優勢就是不需要在 jenkins 上安裝過多的插件,而改用腳本調用,保持jenkins的單一整潔,在機器遷移的情況下會異常方便快捷。
1.整合 dotnet test 命令
首先將 dotnet test 命令整合成一個腳本,腳本如下:
#是否執行當前腳本 execute=$1 #test項目全路徑 testDir=$2 if [ ${execute} == false ];then echo "7tiny: There is nothing to execute!" exit 0 fi echo "7tiny:begin test..." #使用這個方法需要在test項目里安裝nuget包:dotnet add package coverlet.msbuild dotnet test ${testDir} --logger:"trx;LogFileName=test.trx" /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:CoverletOutput='./TestResults/' if [ $? != 0 ];then exit 1 fi echo "7tiny:test finished!" exit 0
參數:
- execute:是否執行腳本(便於和jenkins的checkbox結合,如不需要傳true即可)
- testDir:test項目 xxxtexst.csproj 文件完整目錄地址
2.整合 dotnet sonarscanner 命令
#是否執行當前腳本 execute=$1 #要構建的解決方案名稱 solutionName=$2 #.sln文件全路徑 solutionDir=$3 if [ ${execute} == false ];then echo "7tiny: There is nothing to execute!" exit 0 fi echo "7tiny:begin scanner..." export PATH=${PATH}:${HOME}/.dotnet/tools dotnet sonarscanner begin /k:${solutionName} /n:${solutionName} /v:${BUILD_NUMBER} if [ $? != 0 ];then exit 1 fi dotnet build ${solutionDir} if [ $? != 0 ];then exit 1 fi dotnet sonarscanner end if [ $? != 0 ];then exit 1 fi echo "7tiny:scanner finished!" exit 0
參數:
- execute:是否執行腳本(便於和jenkins的checkbox結合,如不需要傳true即可)
- solutionName:要構建的解決方案名稱
- solutionDir:.sln文件全路徑
腳本里面默認將解決方案的名稱當作 sonarqube 中的項目名稱;將 jenkins 編譯的版本號當作 sonarqube 的活動編號;
3.將shell腳本到服務器 jenkins 可以訪問的目錄
我們將上述兩個 shell 腳本存為 xxx.shell 並存放到服務器上,以便使用 jenkins 調用執行,比如我這里將兩個文件存到了服務器某位置:
【將shell腳本整合到jenkins中】
有了shell 腳本,那么 jenkins 的整合便非常容易了,我們只需要在 jenkins 的 shell 命令框調用寫好的 shell 腳本, 並將參數傳遞進去即可。
例如:
打開 jenkins 中的的某個項目的項目配置:
然后在最下面的 Build 區域 Execute Shell 框內填寫相應的 shell 命令,當然是調用我們的 shell 腳本:
依次調用了:
- 編譯打包發布nuget
- 執行test
- 執行sonar canner
每個腳本的第一個參數都是是否執行,以便於我們配置 checkbox 決定是否執行某個腳本,其他參數按順序傳入即可。
checkbox 的配置方式:
我這里選擇 boolean 參數的配置,然后我們在 build 的時候就可以自行決定是否選擇。
【Jenkins編譯執行代碼分析】
我們本次不進行nuget打包,只進行代碼分析,因此選擇代碼分析的 checkbox :
點擊 Build 然后靜候執行的結果,通過 jenkins 的日志,我們可以看出代碼分析結果已經成功推送到了 sonarqube。
我們可以打開 sonarqube 的對應項目進行查看:
通過結果我們可以看出,本次構建相對於上次構建的結果,新加的代碼的單元測試覆蓋達到了百分百,且沒有任何代碼不規范和漏洞,但是歷史的代碼還有很多的漏洞需要填補。
【總結】
使用 sonarqube 分析dotnet core/C#代碼的全部過程以及集成jenkins已經完成了,通過通用的腳本,我們可以方便地應用到多個項目中。
如有任何疑問,歡迎在評論區討論~