2015-05-15 16 views
6

मैं यूनो-चॉइस डायनामिक रेफरेंस पैरामीटर में एक शेल स्क्रिप्ट को कॉल करना चाहता हूं और कुछ ऑपरेशन कर सकता हूं (कुछ फाइलें बनाएं और कुछ अन्य खोल कॉल स्लीप स्क्रिप्ट से स्क्रिप्ट्स को कॉल करें)।पैरामीटर विकल्प में जेनकिंस ग्रोवी स्क्रिप्ट से मैं शैल स्क्रिप्ट कैसे निष्पादित करूं?

अभी तक मैं खोल स्क्रिप्ट और बिल्ली को कुछ फाइलों को कॉल करने में सक्षम हूं लेकिन मैं नई फाइलें बनाने के लिए सक्षम नहीं हूं या इसके भीतर से एक और शेल स्क्रिप्ट कॉल कर सकता हूं।

def sout = new StringBuffer(), serr = new StringBuffer() 

// 1) 
def proc ='cat /home/path/to/file'.execute() 
//display contents of file 

// 2) 
def proc="sh /home/path/to/shell/script.sh".execute() 
//to call a shell script but the above dosent work if I echo some contents 
//into some file. 

proc.consumeProcessOutput(sout, serr) 
proc.waitForOrKill(1000) 
return sout.tokenize() 

जैसे: - script.sh में अगर मैं पंक्ति जोड़ें

echo "hello world" > test 

तो परीक्षण फ़ाइल

अधिक समझने के लिए नहीं बनाई गई है:

Groovy executing shell commands

http://jenkins-ci.361315.n4.nabble.com/Executing-a-shell-python-command-in-Jenkins-Dynamic-Choice-Parameter-Plugin-td4711174.html

+0

क्या काम नहीं करता है? निशान, त्रुटियां, ...? – cfrick

+1

यह काम करने के मामले में 'sh echo "हैलो वर्ल्ड"> test' या बेहतर' echo "हैलो वर्ल्ड">/tmp/test' आज़माएं, लेकिन आपको फ़ाइल नहीं मिल सका। – Bohemian

+0

धन्यवाद बोहेमियन। लेकिन यह भी काम नहीं कर रहा है। – Triangle

उत्तर

13

चूंकि आप एक ग्रोवी रैपर से बैश स्क्रिप्ट चला रहे हैं, इसलिए stdout और stderr पहले से ही ग्रोवी रैपर पर रीडायरेक्ट कर दिए गए हैं। इसे ओवरराइड करने के लिए, आपको शेल स्क्रिप्ट के भीतर exec का उपयोग करने की आवश्यकता है।

उदाहरण के लिए

:

ग्रूवी स्क्रिप्ट:

def sout = new StringBuffer(), serr = new StringBuffer() 

def proc ='./script.sh'.execute() 

proc.consumeProcessOutput(sout, serr) 
proc.waitForOrKill(1000) 
println sout 

खोल स्क्रिप्ट script.sh नाम और एक ही फ़ोल्डर में स्थित है:

#!/bin/bash 
echo "Test redirect" 

ऊपर खोल स्क्रिप्ट के साथ चल रहा है ग्रूवी groovy स्क्रिप्ट

के stdout पर आउटपुट Test redirect उत्पादन करेगा

अब script.sh` में exec साथ stdout पुनर्निर्देशन जोड़ें:

#!/bin/bash 
exec 1>/tmp/test 
echo "Test redirect" 

अब ग्रूवी स्क्रिप्ट चलाने एक सामग्री में Test redirect

आप मैं के बारे में अधिक पढ़ सकते हैं/ओ पुनर्निर्देशन के साथ एक फ़ाइल /tmp/test पैदा करेगा bash here

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