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

【前言】

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

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

【實現功能】

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

  1. 將上一篇文章中的sonarqube命令整合爲shell腳本
  2. 將 shell 腳本集成到jenkins中

【整合sonarqube命令爲shell腳本】

由於使用的是 linux 服務器,所以,咱們將上一篇文章中關於 sonarqube 的相關命令整合到 shell 腳本中,以便方便地調用,而且很容易集成到CI/CD工具中。shell

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 的活動編號;ui

3.將shell腳本到服務器 jenkins 能夠訪問的目錄spa

咱們將上述兩個 shell 腳本存爲 xxx.shell 並存放到服務器上,以便使用 jenkins 調用執行,好比我這裏將兩個文件存到了服務器某位置:.net

【將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已經完成了,經過通用的腳本,咱們能夠方便地應用到多個項目中。

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

相關文章
相關標籤/搜索