我得到這個運行Jenkins和SonarQube最近。該配置旨在通過社區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%的覆蓋率 - 但是它的數據路徑,多數民衆贊成在目前重要...
是什麼記錄在/ tmp /Error.txt?當你在jenkins中運行任何作業時,它會以用戶「jenkins」的形式運行,但當你運行它時,你可能不會像jenkins用戶那樣運行它。這可能是麻煩製造者。 –
日誌沒有顯示任何內容,並且它在嘗試從終端和jenkins運行時作爲普通用戶運行 – coder123