我们有一个Play 1.2.4应用程序,并且我们为该应用程序在Ubuntu上安装了Jenkins。我们在Cobertura方面遇到了问题。
在运行测试(成功)之后,偶尔会出现以下错误:
在运行测试(成功)之后,偶尔会出现以下错误:
---------------------------------------
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at net.sourceforge.cobertura.util.FileLocker.lock(FileLocker.java:124)
at play.modules.cobertura.CoberturaPlugin$CoberturaPluginShutdownThread.run(Unknown Source)
Caused by: java.nio.channels.OverlappingFileLockException
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.checkList(FileChannelImpl.java:1166)
at sun.nio.ch.FileChannelImpl$SharedFileLockTable.add(FileChannelImpl.java:1068)
at sun.nio.ch.FileChannelImpl.lock(FileChannelImpl.java:824)
at java.nio.channels.FileChannel.lock(FileChannel.java:860)
... 6 more
---------------------------------------
Unable to get lock on /var/lib/jenkins/jobs/project/workspace/cobertura.ser.lock: null
This is known to happen on Linux kernel 2.6.20.
Make sure cobertura.jar is in the root classpath of the jvm
process running the instrumented code. If the instrumented code
is running in a web server, this means cobertura.jar should be in
the web server's lib directory.
Don't put multiple copies of cobertura.jar in different WEB-INF/lib directories.
Only one classloader should load cobertura. It should be the root classloader.
---------------------------------------
lock file could not be deleted
这似乎并没有“破坏构建”,但在构建的后面,我们遇到了以下问题(导致cobertura报告失败)
Publishing Cobertura coverage report...
No coverage results were found using the pattern 'test-result/code-coverage/coverage.xml' relative to '/var/lib/jenkins/jobs/project/workspace'. Did you enter a pattern relative to the correct directory? Did you generate the XML report(s) for Cobertura?
Build step 'Publish Cobertura Coverage Report' changed build result to FAILURE
手动运行后续的构建通常会通过。
根据Zero code coverage with cobertura 1.9.2 but tests are working,我尝试在play auto-test命令之后设置-Dcobertura.use.java.nio=false。
由于这个错误只是偶尔发生,我不确定这是否有所帮助。但是此后,我们遇到了play auto-test挂起的问题:
...
Executing /opt/play-1.2.4/play auto-test "/var/lib/jenkins/jobs/project/workspace" -Dcobertura.use.java.nio=false
[workspace] $ /opt/play-1.2.4/play auto-test "/var/lib/jenkins/jobs/project/workspace" -Dcobertura.use.java.nio=false
<build stuck here for a couple of days>
由于没有什么是完全确定的,因此在这里谈论因果关系有点困难。(这似乎发生在jenkins/服务器重新启动后的一两个构建之后)
目前我正在考虑禁用我们项目中的Cobertura,但如果有人有其他想法,那就太好了=)
chmod 777 -R ~jenkins
命令,哈哈。 - reagan