2015-06-02 7 views
16

में सिस्टम ग्रोवी का उपयोग करके फ़ाइल बनाएं मेरा कार्य नोड विवरण एकत्र करना और उन्हें प्रमाणपत्र प्रारूप में सूचीबद्ध करना है। मुझे फ़ाइल में डेटा लिखना है और इसे सीएसवी फ़ाइल के रूप में सहेजना है और इसे कलाकृतियों के रूप में संलग्न करना है। लेकिन मैं "सिस्टम ग्रूवी निष्पादित" का निर्माण कदमजेनकींस जॉब में, मौजूदा वर्कस्पेस

import jenkins.model.Jenkins 
import hudson.model.User 
import hudson.security.Permission 
import hudson.EnvVars 

EnvVars envVars = build.getEnvironment(listener); 

filename = envVars.get('WORKSPACE') + "\\node_details.txt"; 
//filename = "${manager.build.workspace.remote}" + "\\node_details.txt" 
targetFile = new File(filename); 
println "attempting to create file: $targetFile" 

if (targetFile.createNewFile()) { 
    println "Successfully created file $targetFile" 
} else { 
    println "Failed to create file $targetFile" 
} 
print "Deleting ${targetFile.getAbsolutePath()} : " 
println targetFile.delete() 

आउटपुट

attempting to create file: /home/jenkins/server-name/workspace/GET_NODE_DETAILS\node_details.txt 
FATAL: No such file or directory 
java.io.IOException: No such file or directory 
    at java.io.UnixFileSystem.createFileExclusively(Native Method) 
    at java.io.File.createNewFile(File.java:947) 
    at java_io_File$createNewFile.call(Unknown Source) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:42) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) 
    at Script1.run(Script1.groovy:13) 
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:682) 
    at groovy.lang.GroovyShell.evaluate(GroovyShell.java:666) 
    at hudson.plugins.groovy.SystemGroovy.perform(SystemGroovy.java:81) 
    at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:772) 
    at hudson.model.Build$BuildExecution.build(Build.java:199) 
    at hudson.model.Build$BuildExecution.doRun(Build.java:160) 
    at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:535) 
    at hudson.model.Run.execute(Run.java:1732) 
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43) 
    at hudson.model.ResourceController.execute(ResourceController.java:88) 
    at hudson.model.Executor.run(Executor.java:234) 

कुछ समय मैं लोगों का उपयोग करें प्राप्त "प्रबंधक के रूप में प्लगइन का उपयोग कर जेनकींस में ग्रूवी स्क्रिप्ट का उपयोग कर एक फ़ाइल बनाने के लिए सक्षम नहीं हूँ "ऑब्जेक्ट, मैं इसे कैसे प्राप्त कर सकता हूं? क्या कार्य को पूरा करने के बारे में कोई विचार है?

उत्तर

31

समस्या ग्रूवी प्रणाली स्क्रिप्ट हमेशा की तरह, जेनकींस मास्टर नोड में चलाया जाता है, जबकि कार्यक्षेत्र अपने जेनकींस गुलाम नोड, में फ़ाइल पथ जो अपने गुरु में मौजूद नहीं है नोड।

आप कोड

theDir = new File(envVars.get('WORKSPACE')) 
println theDir.exists() 

द्वारा सत्यापित कर सकते हैं यह वापस आ जाएगी false

आप गुलाम नोड का उपयोग नहीं करते हैं, तो यह true

वापस आ जाएगी समाधान के रूप में हम नहीं कर सकते सामान्य File का उपयोग करें, हमें FilePathhttp://javadoc.jenkins-ci.org/hudson/FilePath.html

का उपयोग करना होगा
if(build.workspace.isRemote()) 
{ 
    channel = build.workspace.channel; 
    fp = new FilePath(channel, build.workspace.toString() + "/node_details.txt") 
} else { 
    fp = new FilePath(new File(build.workspace.toString() + "/node_details.txt")) 
} 

if(fp != null) 
{ 
    fp.write("test data", null); //writing to file 
} 

फिर यह दोनों मामलों में काम करता है।

+4

को ठीक करने की आवश्यकता है जैसे 'fp' ऑब्जेक्ट सृजन का एक सरल संस्करण:' fp = new filePath (build.workspace, 'node_details.txt') '। सशर्त जांच अनावश्यक है क्योंकि यह मास्टर को भी समृद्ध करेगी। – ceilfors

0

मुझे लगता है त्रुटि पथ प्रारूप के कारण हुई थी, तो आप नीचे की कोशिश कर सकते:

परिवर्तन

filename = envVars.get('WORKSPACE') + "\\node_details.txt"; 

filename = envVars.get('WORKSPACE') + "/node_details.txt"; 

लिए क्योंकि जब मैं अपने स्थानीय जेनकींस सर्वर में करने की कोशिश की, मैं इसे सफलतापूर्वक निष्पादित करता हूं।

enter image description here

enter image description here

+0

मैं अलग स्लेश स्वरूपों की कोशिश की थी मैं अभी भी java.io.IOException मिलती है: ऐसी कोई फ़ाइल या निदेशक टोरी – bicepjai

+0

मैं जेनकिंस की होम निर्देशिका से भाग सकता हूं लेकिन नौकरी के कार्यक्षेत्र नहीं, मैं सिस्टम ग्रोवी विकल्प का उपयोग कर रहा हूं। शायद इसीलिए ? मैं सिस्टम ग्रोवी विकल्प का उपयोग कर नौकरी के कार्यक्षेत्र में कैसे चला सकता हूं? ऐसा लगता है कि – bicepjai

0

@ लैरी काई द्वारा उत्तर सिस्टम ग्रूवी स्क्रिप्ट से दास नोड को फ़ाइल लिखने के लिए एक भाग को कवर करता है (जैसा कि यह मास्टर नोड पर चलता है)।

हिस्सा मैं जवाब दे रहा हूँ "कुछ समय मैं लोगों का उपयोग करें" प्रबंधक "वस्तु, मैं कैसे पहुँच यह करने के लिए प्राप्त कर सकते हैं" इस वस्तु पहले से ही उपलब्ध पोस्ट में पर्यावरण की तरह बहुत कुछ तक पहुँचने के लिए ग्रूवी स्क्रिप्ट का निर्माण है चर,, स्थिति का निर्माण का निर्माण प्रदर्शन नाम आदि

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin से उद्धरित:।

"ग्रूवी स्क्रिप्ट चर प्रबंधक, विभिन्न तरीकों से अपने को सजाने के लिए बनाता है प्रदान करता है जो उपयोग कर सकते हैं इन तरीकों में श्वेत सूची में विभाजित किया जा सकता विधियों और गैर श्वेतसूची विधियों।"

इसे उपयोग करने के लिए, हम सीधे पोस्ट में यह कॉल कर सकते हैं ग्रूवी स्क्रिप्ट का निर्माण। जैसे

manager.build.setDescription (" कस्टम वर्णन ") manager.addShortText (" यहां अपना संदेश जोड़ें ") ।।

सभी तरीकों प्रबंधक वस्तुओं पर उपलब्ध यहाँ प्रलेखित रहे हैं

https://wiki.jenkins-ci.org/display/JENKINS/Groovy+Postbuild+Plugin#GroovyPostbuildPlugin-Whitelistedmethods

संबंधित मुद्दे