2012-10-01 28 views
64

के साथ समस्याएं हमारे पास 1.2.4 एप्लिकेशन है और हमें एप्लिकेशन के लिए जेनकिन्स (उबंटू पर) मिला है। हमें कोबर्टुरा के साथ समस्याएं आ रही हैं।जेनकींस + प्ले 1.2.4: कोबर्टूरा लॉक फाइलों/रिपोर्ट

--------------------------------------- 
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 

यह लेकिन आगे का निर्माण नीचे "निर्माण को तोड़ने" प्रतीत नहीं होता है, हम पाते हैं:

परीक्षण (सफलतापूर्वक) चलाने के बाद, हर अब और फिर, हम निम्नलिखित त्रुटि मिलती है निम्नलिखित (जो कोबर्टूरा रिपोर्ट विफल होने का कारण बनता है)

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 के अनुसार, मैंने ऑटो-टेस्ट-कमांड खेलने के बाद -Dcobertura.use.java.nio = false सेट करने का प्रयास किया।

चूंकि यह त्रुटि केवल तब हो रही थी और फिर, अगर यह मदद मिली तो मुझे पूरी तरह से यकीन नहीं है।

... 
    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> 

कुछ भी नहीं के बाद से पूरी तरह से नियतात्मक किया गया है, यह थोड़ा यहाँ causalities के बारे में कहना मुश्किल है: लेकिन उसके बाद, हम खेलने ऑटो परीक्षण फांसी के साथ एक समस्या मिला है।

वर्तमान में मैं हमारे परियोजना में Cobertura अक्षम करने पर विचार कर रहा हूँ (यह एक या दो के बाद जेनकींस/सर्वर को पुनः आरंभ करने के बाद क्या बनाता है लगता है), लेकिन अगर किसी को अन्य विचारों है, कि बहुत अच्छा होगा =)

+2

हम वास्तव में एक ही समस्या है! मैंने cobertura.use.java.nio को भी उसी तरह से आजमाया और यह भी लटकता है ... – valanto

+0

@valanto: आपके पास क्या पर्यावरण है? – Touko

+0

जैसा कि आप सोचते हैं उसी सेटअप। उबंटू मशीन पर जेनकींस चलाना Play1.2.4 का प्रयोग, कोबर्टुरा मॉड्यूल 2.4, नवीनतम जेनकींस। हम जेनकींस पर भी ऑटो-टेस्ट चलाते हैं और जब मैंने -Dcobertura.use.java.nio = false को भी कोशिश की तो इसे भी फांसी दी गई। कोबर्टूरा के साथ हमारी असफलताओं को भी चालू और बंद कर दिया गया है ... – valanto

उत्तर

0

आप क्या

%test.play.tmp=none 

आपकी application.conf फ़ाइल में सेट करें?

+2

इसे एक प्रश्न के रूप में नहीं, एक प्रश्न के रूप में phrased किया जाना चाहिए। – jayunit100

2

स्पष्ट रूप से यह आपके जेवीएम कार्यान्वयन में या इसके बजाय, आप अपने कोबर्टुरा जेएआर को तैनात करने के तरीके में जेवीएम लॉकिंग मुद्दों के कारण हैं।

जेनकिंस जेवीएम धागे के बहुत सारे हो सकते हैं, और यदि आपके वैश्विक क्लासपाथ पर कोबेटुरा है, तो यह संभव है कि कुछ अजीब टकराव हो रहे हों।

मुझे लगता है कि अंततः, यह कोबर्टुरा में एक मामूली बग के लिए जिम्मेदार ठहराया जाना चाहिए (जब तक जटिल कॉर्बर्टुरा फ़ाइल लॉकिंग कुछ और महत्वपूर्ण समस्या को हल नहीं कर रहा हो)।

कोबर्टुरा के फ़ाइल लॉक (कोबर्टुरा/src/main/java/net/sourceforge/cobertura/util/fileLocker.java) के स्रोत कोड के अनुसार, कई जेवीएम कोबर्टुरा जार लोड करने के आसपास कुछ समस्याएं हैं।

हल करने के लिए, सुनिश्चित करें कि केवल एक प्रति और एक ऐप लॉन्च हो रहा है और कॉर्बेटुरा का उपयोग कर रहा है।

आपके वीएम कार्यान्वयन के कारण इसे ठीक करने का कारण यह है कि आपने कोबेट्रूरा को लोड करने के तरीके में विविधता की मात्रा कम कर दी है। इसके अलावा आप अपने वीएम को उच्च आवृत्ति के साथ फिर से अपने जेनकींस सर्वर के साथ पुनरारंभ कर रहे हैं।

हमारे जेनकिन्स कॉर्बर्टुरा में निर्मित, हम केवल मेवेन प्लगइन का उपयोग करते हैं और यह बिना किसी समस्या के ठीक काम करता है (लेकिन फिर, हम जावा 1.7 का उपयोग नहीं कर रहे हैं, न ही हम Play का उपयोग कर रहे हैं)।

1

-Dcobertura.use.java.nio = झूठी पिछली बार फ़ाइल लॉकिंग का उपयोग करने में सक्षम होने के लिए सत्य में बदलने की आवश्यकता होती है क्योंकि आपका त्रुटि संदेश समझाया गया है।

इसके अलावा, कहीं भी एप्लिकेशन को कोबर्टूरा के लिए पूर्ण फ़ोल्डर क्लासपाथ जोड़ने की आवश्यकता है।

यह appears आप एक COF के समान n कुछ (लगातार फ़ाइल खोलें), त्रुटि संदेश एक फ़ाइल है कि मौजूद है की चर्चा करते हुए है, लेकिन फ़ाइल की क्षेत्रों बंद हैं ड्राइव, नहीं ही फ़ाइल बस का उपयोग कर रहे हैं।

2

यह हमें थोड़ी देर के लिए परेशान कर रहा है (प्ले 1.2.4/जेनकींस)। जेनकिंस कोबर्टूरा प्लगइन (रिपोर्ट प्रकाशित) और फ्रेमवर्क कोबर्टुरा मॉड्यूल खेलने के बीच ओवरलैपिंग अनुक्रमों के कारण कुछ समस्या है। मेरा मानना ​​है कि यह पूरी तरह से समय संयोग और इसलिए अस्थायी है। बेहतर समाधान की कमी के लिए हमारे पास निम्नलिखित कार्य हैं।

हटाया गया जेनकिन्स कोबर्टुरा रिपोर्ट मुख्य निर्माण नौकरी से कार्रवाई प्रकाशित करती है। हमने एक नया जेनकिन्स जॉब बनाया जो प्रकाशित कोबर्टुरा कवरेज रिपोर्ट एक्शन के साथ स्थापित है। नई नौकरी में, हमारे पास मुख्य बिल्ड जॉब वर्कस्पेस से कवरेज.एक्सएमएल को कोबर्टुरा कवरेज रिपोर्ट प्रकाशित करने के लिए नई नौकरी के कार्यक्षेत्र में कॉपी करने के लिए खोल कार्रवाई है। एक ही नौकरी में प्ले कोबर्टुरा और जेनकिन्स कोबर्टुरा चलाने से बचने के लिए प्रतिलिपि (स्पष्ट कारणों से) की जाती है।

इसके नहीं सबसे अच्छा है, लेकिन कवरेज रिपोर्ट/रेखांकन देखने के लिए :-)

2

चाल एक datafile (cobertura.ser) मॉड्यूल प्रति उपयोग करने के लिए समानांतर कार्यों से ताले से बचने के लिए है खुश।

चींटी के साथ:

<cobertura-instrument todir="${build.dir}" datafile="cobertura.ser.${modulename}"> 
    ... 

अंत में एक Cobertura फाइल में कई Cobertura फ़ाइलें विलय:

<target name="merge-coverage"> 
    <cobertura-merge datafile="cobertura.ser"> 
     <fileset dir="${build.dir}"> 
      <include name="cobertura.ser.*" /> 
     </fileset> 
    </cobertura-merge> 
</target>