2014-03-25 47 views
0

我想從詹金斯使用gcovr產生代碼覆蓋率報告,但無濟於事,它不會產生結果,但如果我從終端運行它,它工作正常。 這裏是我執行直通詹金斯生成相同的命令:與jenkins gcovr不工作

gcovr -r /path/to/sourcefiles --object-directory=/Users/testinganywhere1/pathtogcdafile -x -b -e /Developer 1> html/coverage.xml 2>/tmp/Error.txt 

如果我通過終端運行相同的工作原理GRT!

感謝您的幫助!

PS:我在主機上運行jenkins並指示它在slave機器上執行作業。

+0

是什麼記錄在/ tmp /Error.txt?當你在jenkins中運行任何作業時,它會以用戶「jenkins」的形式運行,但當你運行它時,你可能不會像jenkins用戶那樣運行它。這可能是麻煩製造者。 –

+0

日誌沒有顯示任何內容,並且它在嘗試從終端和jenkins運行時作爲普通用戶運行 – coder123

回答

0

你必須先去對象目錄執行它

cd /Users/testinganywhere1/pathtogcdafile; 
gcovr -r /path/to/sourcefiles --object-directory=/Users/testinganywhere1/pathtogcdafile -x -b -e /Developer 1> html/coverage.xml 2>/tmp/Error.txt 
0

爲別人這個問題之前,對我來說,這竟然是在被作爲詹金斯運行時設置的路徑的差異用戶從命令行vs實際運行Jenkins。

因此,嘗試在兩個Jenkins中運行「echo $ PATH」並從命令行手動運行,然後比較兩者。

0

我得到這個運行JenkinsSonarQube最近。該配置旨在通過社區CXX插件將數據導入到SonarQube中,但覆蓋文件也可由Cobertura插件用於Jenkins。

有問題的部分是在XML報告中獲得正確的源文件名。對於SonarQube,它們預計與「項目根」相關,即「sonar-project.properties」所在的位置,或SonarQube的「runner」被調用的位置。在我們的案例中,這與工作空間的根本不一樣。

我們需要的'gcovr'版本是當前的HEAD版本(2017-06-14),因爲發佈的3.3版本不適合我們。另外,我必須在gcovr的'process_gcov_data'函數中對文件路徑進行規範化處理,在確定之後,但在應用過濾之前。對於我們拉到版本,以下是添加行524:

fname = os.path.normpath (fname); 

「gcovr」有一個限制,它只會在根目錄和目標目錄之間的文件夾中查找文件 - 一維搜索。但是,在gcov數據包含相關文件名規範(如頭文件)的位置,可能會出現此行之外的文件。我用gcovr提出了一張票來搜索根目錄的子目錄,但我不會屏住呼吸。

我們對「gcovr」呼叫當時:

cd <project-root> && gcovr   \ 
    <object-directory>    \ 
    --root=<project-root>   \ 
    --xml-pretty     \ 
    --exclude-unreachable-branches \ 
    -o <output-xml> 

哪裏<object-directory>是包含目標文件和覆蓋數據的位置,<project-root>是我們項目的基地。所有是絕對路徑,並且<object-directory><project-root>之下。

在我們的案例中,在<project-root><object-directory>之間的目錄中,雖然我不喜歡這個'gcovr'的限制,但它在哪裏。

<output-xml>然後包含相對於<project-root>的文件路徑的Cobertura格式的XML覆蓋。

這些使用Cobertura Plugin進口到詹金斯。在我們的例子中,我們使用的是管道的腳本,並在「管道語法」頁面插件顯示爲一個子選項的step片段:

step([ 
    $class: 'CoberturaPublisher', 
    coberturaReportFile: '<output-xml>', 
    failNoReports: false, 
    failUnhealthy: false, 
    failUnstable: false, 
    maxNumberOfBuilds: 100 
]) 

你的選項可能有所不同,我們指定文件作爲通配符。

覆蓋範圍出現在Jenkins內的項目頁面上,既作爲摘要圖形,又顯示準確的「Coverage Report」鏈接。

XML格式包含一個<source>標籤,其中列出了Jenkins使用的<project-root>的絕對路徑。如果這是相對於工作區而言是更可取的,但在另一天則更好。文件名然後是相對於這個<source>位置。

SonarQube插件很痛苦,因爲它忽略了<source>標籤,並且要求文件名只是相對於<project-root>(其中聲納亞軍被調用)。

我現在顯示在我使用這個鍛鍊模板中的項目mightly 1%的覆蓋率 - 但是它的數據路徑,多數民衆贊成在目前重要...