gcovr 不会为 Jenkins 上的某些分支生成报告
gcovr does't generate reports for some branches on Jenkins
我们发现,对于自动拉入 Jenkins 的某些 Github 分支,gcovr 不会生成任何覆盖率信息。它声称未找到任何文件,并且 returns 代码覆盖率为 0%。
其他分支工作正常。一旦我们将代码拉入 master,gcovr 就可以为相同的代码生成代码覆盖率文件。
发生这种情况是因为 gcov 创建的文件包含整个路径,例如#usr#include#boost#numeric#conversion#detail#converter.hpp.gcov
。如果分支名称是 Jenkins 工作区路径的一部分,那么长的分支名称可能会使其中一些生成的文件名超出文件系统的最大文件名长度。
要解决此问题,请将 gcov 设置为散列文件名并 运行 gcovr 分两次通过:
gcovr -r `pwd` --gcov-executable="gcov -s `pwd` -x" -k
gcovr -r `pwd` --gcov-executable="gcov -s `pwd` -x" -g --html --html-details -o coverage/index.html
我们发现,对于自动拉入 Jenkins 的某些 Github 分支,gcovr 不会生成任何覆盖率信息。它声称未找到任何文件,并且 returns 代码覆盖率为 0%。
其他分支工作正常。一旦我们将代码拉入 master,gcovr 就可以为相同的代码生成代码覆盖率文件。
发生这种情况是因为 gcov 创建的文件包含整个路径,例如#usr#include#boost#numeric#conversion#detail#converter.hpp.gcov
。如果分支名称是 Jenkins 工作区路径的一部分,那么长的分支名称可能会使其中一些生成的文件名超出文件系统的最大文件名长度。
要解决此问题,请将 gcov 设置为散列文件名并 运行 gcovr 分两次通过:
gcovr -r `pwd` --gcov-executable="gcov -s `pwd` -x" -k
gcovr -r `pwd` --gcov-executable="gcov -s `pwd` -x" -g --html --html-details -o coverage/index.html