У нас есть приложение Play 1.2.4, и у нас есть Jenkins (на Ubuntu) для этого приложения. У нас проблемы с Кобертурой.
После успешного выполнения тестов время от времени мы получаем следующую ошибку:
---------------------------------------
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
Запуск последующей сборки вручную обычно проходит.
Согласно Покрытие нулевого кода с cobertura 1.9 .2, но тесты работают, я попытался установить -Dcobertura.use.java.nio = false после play auto-test -command.
Поскольку эта ошибка возникала только время от времени, я не совсем уверен, помогло ли это. Но после этого у нас возникла проблема с зависанием автотеста игры:
...
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
на нашей машине, ха-ха. - person reagan   schedule 23.06.2013