本系列主要講述sonarqube的安裝部署以及如何集成jenkins自動化分析.netcore項目。目錄以下:html
這篇文章將要介紹的主要內容以下:linux
由於使用的是 linux 服務器,所以,咱們將上一篇文章中關於 sonarqube 的相關命令整合到 shell 腳本中,以便方便地調用,而且很容易集成到CI/CD工具中。shell
shell 腳本另外一個優點就是不須要在 jenkins 上安裝過多的插件,而改用腳本調用,保持jenkins的單一整潔,在機器遷移的狀況下會異常方便快捷。服務器
首先將 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=$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
參數:測試
腳本里面默認將解決方案的名稱看成 sonarqube 中的項目名稱;將 jenkins 編譯的版本號看成 sonarqube 的活動編號;ui
3.將shell腳本到服務器 jenkins 能夠訪問的目錄spa
咱們將上述兩個 shell 腳本存爲 xxx.shell 並存放到服務器上,以便使用 jenkins 調用執行,好比我這裏將兩個文件存到了服務器某位置:.net
有了shell 腳本,那麼 jenkins 的整合便很是容易了,咱們只須要在 jenkins 的 shell 命令框調用寫好的 shell 腳本, 並將參數傳遞進去便可。
例如:
打開 jenkins 中的的某個項目的項目配置:
而後在最下面的 Build 區域 Execute Shell 框內填寫相應的 shell 命令,固然是調用咱們的 shell 腳本:
依次調用了:
每一個腳本的第一個參數都是是否執行,以便於咱們配置 checkbox 決定是否執行某個腳本,其餘參數按順序傳入便可。
checkbox 的配置方式:
我這裏選擇 boolean 參數的配置,而後咱們在 build 的時候就能夠自行決定是否選擇。
咱們本次不進行nuget打包,只進行代碼分析,所以選擇代碼分析的 checkbox :
點擊 Build 而後靜候執行的結果,經過 jenkins 的日誌,咱們能夠看出代碼分析結果已經成功推送到了 sonarqube。
咱們能夠打開 sonarqube 的對應項目進行查看:
經過結果咱們能夠看出,本次構建相對於上次構建的結果,新加的代碼的單元測試覆蓋達到了百分百,且沒有任何代碼不規範和漏洞,可是歷史的代碼還有不少的漏洞須要填補。
使用 sonarqube 分析dotnet core/C#代碼的所有過程以及集成jenkins已經完成了,經過通用的腳本,咱們能夠方便地應用到多個項目中。
若有任何疑問,歡迎在評論區討論~