SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)


【前言】

本系列主要講述sonarqube的安裝部署以及如何集成jenkins自動化分析.netcore項目。目錄如下:

  1. SonarQube系列一、Linux安裝與部署
  2. SonarQube系列二、分析dotnet core/C#代碼
  3. SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)

【實現功能】

  這篇文章將要介紹的主要內容如下:

  1. 將上一篇文章中的sonarqube命令整合為shell腳本
  2. 將 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 腳本:

依次調用了:

  1. 編譯打包發布nuget
  2. 執行test
  3. 執行sonar canner

每個腳本的第一個參數都是是否執行,以便於我們配置 checkbox 決定是否執行某個腳本,其他參數按順序傳入即可。

checkbox 的配置方式:
我這里選擇 boolean 參數的配置,然后我們在 build 的時候就可以自行決定是否選擇。

【Jenkins編譯執行代碼分析】

我們本次不進行nuget打包,只進行代碼分析,因此選擇代碼分析的 checkbox :

點擊 Build 然后靜候執行的結果,通過 jenkins 的日志,我們可以看出代碼分析結果已經成功推送到了 sonarqube。

我們可以打開 sonarqube 的對應項目進行查看:

通過結果我們可以看出,本次構建相對於上次構建的結果,新加的代碼的單元測試覆蓋達到了百分百,且沒有任何代碼不規范和漏洞,但是歷史的代碼還有很多的漏洞需要填補。

【總結】

使用 sonarqube 分析dotnet core/C#代碼的全部過程以及集成jenkins已經完成了,通過通用的腳本,我們可以方便地應用到多個項目中。

如有任何疑問,歡迎在評論區討論~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM