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


系列目錄

Sonarqube結合Jenkins與常見問題

我們引入sonarqube組件的最終目的是要為整個Ci環境服務的,如果不能集成於當前的Jenkins CI,那么我們做的很多關於sonarqube的工作都將是徒勞的.然而這一點幾乎不用擔心,因為我們從前面的講解可以看到我們的構建操作都是通過命令行來進進行的,從這一點來看應該是可以無縫的集成到jenkins環境,然而我們把命令原封搬到Jenkins上發現,事情並不像想像的那么簡單,而是有各種各樣的坑存在.

我們運行以下前面章節運行過的代碼,看看會出現什么問題:

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

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

問題1 命令找不到

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

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

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

問題2 相對路徑問題

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

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

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

這其實是一個常見的問題,我們會發現有時候路徑不帶引號不會出現問題,有時候會出現問題,就筆者的經驗,如果路徑中沒有空格則不用加引號,如果有則需要加引號.因此為了避免不必要的麻煩,建議的最佳實踐是路徑都加上引號.

問題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服務然后再執行腳本,就可以編譯通過了.


免責聲明!

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



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