如何获得封面来创建cover_db?

时间:2014-11-10 12:25:18

标签: linux perl junit jenkins cover

我试图设置Jenkins在我的Perl项目上运行测试和覆盖。在Jenkins中,我有一个shell脚本,如下所示:

perl --version
perl Build.PL
prove -v test.pl --timer -l t > jenkins-${JOB_NAME}-${BUILD_NUMBER}-junit.TAP
/usr/local/bin/cover -test -report clover

当shell执行此调用“/ usr / local / bin / cover -test -report clover”时,它会创建以下输出:

Deleting database /var/lib/jenkins/workspace/Banking/cover_db
cover: running ./Build test "--extra_compiler_flags=-O0 -fprofile-arcs -ftest-   coverage" "--extra_linker_flags=-fprofile-arcs -ftest-coverage"
test.pl .. ok
All tests successful.
Files=1, Tests=120,  7 wallclock secs ( 0.04 usr  0.01 sys +  0.91 cusr  0.04 csys =  1.00 CPU)
Result: PASS
Reading database from /var/lib/jenkins/workspace/Banking/cover_db

Writing clover output file to '/var/lib/jenkins/workspace/Banking/cover_db/clover.xml'...
No such file or directory at /usr/local/share/perl5/Devel/Cover/Report/Clover/Builder.pm line 40.
Build step 'Execute shell' marked build as failure

在我看来,它删除了cover_db目录,如果它存在,但它无法重新创建它,任何人都知道我做错了什么?作为Jenkins用户,我可以创建和删除cover_db目录,因此它不应该是用户权限问题。

提前谢谢

Jan Eskilsson

1 个答案:

答案 0 :(得分:0)

在Devel / Cover / Report / Clover / Builder.pm中提到的第(40)行:

 open( my $fh, '>', $outfile ) or die($!);

在你的例子中,$ outfile为'clover.xml'。

编辑:为了澄清,我似乎死在

open ( my $fh, '>', '/var/lib/jenkins/workspace/Banking/cover_db/clover.xml' )

这就是为什么我怀疑以下问题之一,因为'开放'本身并没有以任何不可挽回的方式让我失望。不幸的是,我不能确切地说出问题所在。希望有人可以。

因此,很可能是Clover没有访问权限在目录中写入此文件的问题,因为此行只是尝试打开具有写访问权限的文件,如果open()失败则会失败。

双重检查Clover的权限,应该修复它。

编辑:因为它正在传递整个路径,(即$ outfile似乎包含/var/lib/jenkins/workspace/Banking/cover_db/clover.xml,而不仅仅是clover.xml,所以它可能也没有在那时创建的目录,我没有深入钻研在代码中足以验证何时完成。

因此,您可能还想在运行后检查目录是否存在,以及是否有权这样做。

您还可以检查目录是否存在或是否可以由三叶草创建。