背景
最近在項目中推廣集成測試的理念以及相關工具,在jenkins中集成sonar去分析項目的java代碼的時候,意外的發現,sonarqube上還有對應python的插件,而自己寫的測試工具大部分都是基於python編寫的,於是就想用sonar來檢查自己的代碼規范及添加單元測試用例來確保工具的穩定和可靠性。
簡要的預想流程
sonar在jenkins中集成的時候,一般都是用mavens下配置sonar : sonar驅動的,如果套用python的插件,要去編寫個pom.xml感覺不太方便(主要是還不太確定如何處理….有大神了解的望指教!),最后還是考慮直接用sonar-runner驅動比較方便。
用sonar-runner的流程就比較簡單了:
- 在項目的代碼根路徑下配置sonar-project.properties;
- 在sonar安裝的服務器下checkout一份項目代碼;
- cd到項目路徑下,運行sonar-runner,就可以得到結果了。
sonar-runner實際操作流程
1. 編寫sonar配置:
在python項目的代碼根目錄下新建一個sonar-project.properties文件,配置內容如下:
其中,最關鍵也是最容易出錯的是sonar.language,這個指定分析的語言配置一直被我認為是填寫python,但無論怎么填寫,都是提示“You must install a plugin that supports the language 'Python' ”。最后通過google,嘗試,確定該位置要支持python的話,應該填寫py。但這點在插件的wiki頁面居然也沒有明確說明,略顯坑爹。當然覺得坑爹的並不是我一個,搜索到插件的討論頁面大把的同學都在噴…歡迎各位前去圍觀http://sonarqube.15.x6.nabble.com/Note-on-the-Python-Plugin-you-need-quot-sonar-language-py-quot-td5014450.html
2. 運行sonar-runner,生成分析結果
一般部署sonarqube,都是在linux上,也有在windows的,區別不大,只是操作腳本的差異,這里以linux為例,若安裝的源碼包,則需要在官網手動下一份sonar-runner。解壓到sonarqube的文件夾中。
首先,要找到sonar-runner的位置,如果不記得路徑的,通過find指令完成,如下:
(這里我搜索出來的比較多,是因為我的sonar和jenkins部署在一台機器上,所以會有mavens運行時的環境文件。)
第二步,就需要在服務器上checkout一份python項目的代碼,並切換到該目錄,如下圖:
第三步,在該目錄下運行sonar-runner,如下圖所示,就會開始運行:
很快就會結束整個掃描,如下圖,運行結束后,就可以到最后提示的路徑去查看此次掃描檢查的問題
前往該頁面,顯示的分析統計結果如下圖,當然具體的詳細問題和分析解決就不是這篇文章所關注的了:
eclipse中關聯sonar
首先,是在eclipse中安裝對應的sonar插件。
官方的插件下載地址為:http://dist.sonar-ide.codehaus.org/eclipse/
在eclipse中安裝該插件,流程為:啟動eclipse,依次找到Help – Install New Softwares… – Add,在添加時如下圖填寫:
其次,勾選提示的可安裝插件,在安裝時,可能會出現SonarQube optional connectors安裝失敗的情況,可以忽略和不選該插件。
之后就是自動安裝,不會耗費多少時間。
第三步,在eclipse的preferences--SonarQube中,找到Servers選項卡,然后填入本地已經部署好的SonarServer信息。如下圖:
第四步,在eclipse中關聯sonar項目
需要在python項目的project名字上,右鍵點擊,然后選擇configure,然后選擇Associate with SonarQube。
第五步,在sonar的項目關聯窗口中,搜索通過運行sonar-runner后,自動建立的python-sonar項目
這里所謂的python-sonar項目,就是在sonar中的對應project(這個project不能手動建立,只能通過運行sonar-runner來生成。)
如下圖,在sonarqube project的文本框位置,輸入項目名的其中部分字符(盡量輸入多點,准確點),如果輸入的名字在本地的sonar服務器中有對應項目存在,就可以搜索出對應的可選內容。
第六步,關聯完成項目后,就可以在eclipse開始分析你的python代碼了,操作效果如下:(同sonar-runner,分析完成后的結果需要到指定的sonar服務器上查看)
總結下:
- sonar作為一個獨立的sa工具平台,是可以支持多種語音的文件的,包括c,c++,java,python等,同時,還可以支持xml等。顯而易見的,在項目集成測試的時候,可以用來做很多代碼的檢查,同時也可以用來做項目的xml配置文件的檢查等。
- 自己的python代碼還不夠規范,問題還是有不少啊,慢慢分析優化。。。