報告集成到jenkins才是最終目的,因此又進行了部分資料查找,得到html和xml報告集成jenkins的配置如下:
一 集成html報告
這種方式集成在你已經用gcov+lcov生成了html報告的基礎上,在此只需要將它放到jenkins中,步驟如下:
1 打開jenkins->進入工程->配置->增加構建后操作步驟->Publish HTML reports
2 生成html報告:配置->增加構建步驟->Execute shell
-
cd your_path sh exittest.sh(上一節中exit程序的腳本) cd your_gcda_gcno_path lcov -c -o coverage.info -b . -d . genhtml coverage.info -o coverage cp coverage_result /data/report/coverage #注意該路徑與html報告的讀取路徑一致
3 運行完畢,即可在jenkins頁面左側和中上側看到THML Report 點開即可查看詳情,如下
二 集成Cobertura的xml報告
集成到Cobertura與集成到html類似,都需要配置構建后步驟和Execute shell,如下
1 jenkins的Cobertura插件
1) jenkins安裝插件Cobertura: jenkins頁面->系統管理->管理插件,可在該頁面搜索安裝插件Cobertura
2)在工程的配置中,增加構建后操作步驟->Publish Cobertura Coverage Report
3) 配置Cobertura
2 配置Execute shell,得到xml文件
1)在jenkins的工程配置中增加構建步驟->Execute shell
sudo sh /data/ad_server/exittest.sh
cd your_code_path
sudo gcovr --xml-pretty -r . --output /data/AdServerTest/coverage.xml
2)在jenkins構建后即可查看結果
三 問題
1 jenkins配置后生成xml報告失敗,報錯如下:
[Cobertura] No coverage results were found using the pattern '/data/cppcoverage/xml/coverage.xml' relative to '/data/AdServerTest'. Did you enter a pattern relative to the correct directory? Did you generate the XML report(s) for Cobertura?
原因:jenkins路徑未關聯,具體我也還沒搞清楚,貌似Cobertura只能使用相對路徑。將生成的xml報告更改為目錄/data/AdServerTest下的目錄即可 路徑后即可。
2 在查看詳細報告時,無法查看具體代碼行數覆蓋,提示Source code is unavailable,如下:
原因:懷疑是jenkins路徑的緣故,存放xml文件的路徑下並沒有源碼,具體我還沒解決,后續補充
解決:我加載的coverage.xml文件目錄為/data/AdServer/reports/coverag.xml目錄,源碼目錄為/data/jenkins/workspace/sourceCode,該文件起始部分如下:
<coverage branch-rate="0.480959479604" line-rate="0.791099668996" timestamp="1486278598" version="gcovr 3.2"> <sources> <source> . //表示會從當前目錄讀取源碼-source code </source> </sources>
因此不能顯示源碼,更改生成xml文件時表示源碼路徑的'.'為絕對路徑即可:sudo gcovr --xml-pretty -r /data/jenkins/workspace/sourceCode/ --output /data/AdServerTest/coverage.xml
<coverage branch-rate="0.480959479604" line-rate="0.791099668996" timestamp="1486278598" version="gcovr 3.2"> <sources> <source> /data/jenkins/workspace/sourceCode/</source> </sources>
得到結果圖如下,覆蓋部分為綠色,未覆蓋部分為紅色: