.net持續集成sonarqube篇之 sonarqube與jenkins集成(命令模式)

系列目錄html

Sonarqube結合Jenkins與常見問題

咱們引入sonarqube組件的最終目的是要爲整個Ci環境服務的,若是不能集成於當前的Jenkins CI,那麼咱們作的不少關於sonarqube的工做都將是徒勞的.然而這一點幾乎不用擔憂,由於咱們從前面的講解能夠看到咱們的構建操做都是經過命令行來進進行的,從這一點來看應該是能夠無縫的集成到jenkins環境,然而咱們把命令原封搬到Jenkins上發現,事情並不像想像的那麼簡單,而是有各類各樣的坑存在.windows

咱們運行如下前面章節運行過的代碼,看看會出現什麼問題:網絡

MSBuild.SonarQube.Runner.exe begin /k:"mytest" /n:"mytest" /v:"v8.0" /d:sonar.cs.opencover.reportsPaths="%CD%\testcover.xml"

msbuild.exe

"E:\personalproject\newTest2018\ConsoleApp1\packages\OpenCover.4.6.519\tools\OpenCover.Console.exe" -output:"%CD%\testcover.xml" -register:user -target:"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" -targetargs:"%CD%\bin\Debug\NunitTest.dll"

MSBuild.SonarQube.Runner.exe end

運行以上命令根據可能會出現如下問題:dom

問題1 命令找不到

可能會有童鞋遇到MSBuild.SonarQube.Runner.exe is not recognized as an internal or external command,operable program or batch file.ui

固然可能有些童鞋不會遇到這個問題,這主要取決於環境變量path的設置spa

avatar
能夠看到這個界面有兩個地方能夠設置path,上面是用戶級別的,下面是系統級別的,若是你是在上面用戶級別設置的path,則Jenkins沒法讀取到(這裏僅僅是指默認狀況下)當前用戶變量的,由於Jenkins執行用戶和當前用戶並非同一個用戶.(你們能夠在jenkins裏執行whoami來看下jenkins裏的執行用戶).這裏有兩個解決辦法:第一種辦法就是指定可執行文件MSBuild.SonarQube.Runner.exe的完整路徑(其它可執行文件也同樣),第二,把環境變量添加到全局配置裏.加到全局變量裏雖然方便了,可是全局變量的總長度是有限制的,若是配置的過多很容易超出限制,還有一點問題就是像mono在安裝的時候全自動添加不少環境變量,若是用戶裝了mono,使用全局的msbuild編譯有時候會形成編譯的結果和指定完整路徑的編譯結果不一致,這一點請用戶本身斟酌.命令行

問題2 相對路徑問題

以上代碼中咱們使用了%CD%,咱們前面的示例都是在工程目錄下執行的,%CD%即爲當前目錄,而在Jenkins環境中,當前目錄是Jenkins\workspace\項目名,若是處理不當,會致使編譯錯誤.3d

第二段msbuild.exe也是同樣問題,它必須在工程目錄下的時候纔不須要指定要編譯的項目名,若是當前目錄下沒有sln或者csproj文件,則須要顯式指定項項目文件的完整路徑如msbuild.exe "E:\personalproject\newTest2018\ConsoleApp1\NunitTest\NunitTest.csproj"code

問題3 路徑是否須要加引號

這實際上是一個常見的問題,咱們會發現有時候路徑不帶引號不會出現問題,有時候會出現問題,就筆者的經驗,若是路徑中沒有空格則不用加引號,若是有則須要加引號.所以爲了不沒必要要的麻煩,建議的最佳實踐是路徑都加上引號.xml

問題4 默認Jenkins帳戶沒法編譯Sonarqube項目

咱們把全部的問題都解決完以後,會發現Jenkins仍然構建失敗,提示信息以下Running the Scanner for MSBuild under Local System or Network Service account is not supported. Please, use a local or domain user account instead.
以上錯誤明確提出,Sonarqube MSbuild 掃描器不支持本地系統帳戶或者網絡服務帳戶,須要使用普通帳戶登錄.下面咱們講一下如何處理這個問題.

咱們打開windows cmd執行whoami查看一下當前用戶:
avatar

右擊個人電腦選擇管理而後從管理界面裏面找到服務或者在cmd界面輸入services.msc來打開服務管理界面,從服務管理界面找到jenkins服務,右鍵點擊屬性,在彈出的對話框中切換到登錄標籤,若是沒有登錄則是本地敗,咱們選擇此帳戶

avatar
而後輸入帳戶和密碼點擊肯定.

完成以上操做之後從新啓動jenkins服務而後再執行腳本,就能夠編譯經過了.

相關文章
相關標籤/搜索