2016-10-29 13 views
5

मैं एक जेनकींस पाइपलाइन काम है, जिसमें मैं एक bash स्क्रिप्ट नामित setup.sh जो की तरह दिखता है के साथ अपने वातावरण कॉन्फ़िगर है में स्क्रिप्ट पार्टी की योजना बनाई:चर गुजर एक जेनकींस पाइपलाइन काम

#!/bin/bash 
export ARCH=$1 
echo "architecture = " ${ARCH} 

जेनकींस पाइपलाइन स्क्रिप्ट में, Icall setup.sh स्क्रिप्ट के साथ:

def lib_arch='linux-ubuntu-14.04-x86_64-gcc4.8.4' 
sh ". /opt/setup.sh ${lib_arch}" 

दुर्भाग्य से ऐसा लगता है कि नहीं चर setup.sh स्क्रिप्ट को पारित कर दिया है, और गूंज $ {ARCH} कोई रिक्त स्ट्रिंग वापसी! मैंने इसके बजाय करने की कोशिश की: sh "स्रोत /opt/setup.sh $ {lib_arch}" और यह "स्रोत नहीं मिला" संदेश के साथ-साथ विफल रहता है। मैं भी

#!/bin/sh 

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

अद्यतन: एक समाधान के इस सूत्र में बर्ट जनवरी Schrijve द्वारा sugggested था (देखें नीचे):

sh "bash -c \" source /opt/setup.sh ${lib_arch}\"" 

उत्तर

2

उदाहरण नीचे काम करता है:

void updateApplicationVersionMaven(String version) { 
    sh "mvn -B versions:set -DnewVersion=$version" 
} 

और एक पूरी पाइपलाइन स्क्रिप्ट (पर परीक्षण किया जेनकींस 2.7.3):

node { 
    stage('test') { 
     def testVar='foo' 
     sh "echo $testVar"  
    } 
} 

संपादित करें (टिप्पणियों के बाद): आह, परीक्षण कुछ और संपादित करें और इस मुद्दे को पुन: पेश कर सकते हैं। ऐसा इसलिए है क्योंकि आप स्क्रिप्ट को "। /opt/setup.sh" के साथ सोर्स कर रहे हैं। यह शैल पर्यावरण को प्रभावित करता है, और इस मामले में जेनकीस चर इंजेक्शन तोड़ता है। दिलचस्प।

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

def testVar='foo3' 
sh "bash -c \". /var/jenkins_home/test.sh $testVar && echo \$ARCH\"" 

पिछले गूंज अब testVar की सामग्री है कि स्क्रिप्ट के लिए एक तर्क के रूप में पारित किया गया था और echos इसके बाद स्क्रिप्ट द्वारा पर्यावरण चर के रूप में सेट किया गया।

+0

मैं अपने सुझाव की कोशिश की और यह विफल रहता है। मैंने बस ऐसा करने की भी कोशिश की: sh "। /opt/setup.sh bla"। जाहिर है, पैरामीटर शेल स्क्रिप्ट को पास नहीं किया गया है, क्योंकि $ # रिटर्न 0 है, जबकि स्क्रिप्ट कंसोल में, मुझे [testh] रनिंग शेल स्क्रिप्ट + मिलती है। /opt/setup.sh linux-ubuntu-14.04-x86_64-gcc4.8.4 –

+0

यह अजीब है। मैंने एक छोटा सा उदाहरण जोड़ा है और इसे जेनकींस 2.7.3 पर परीक्षण किया है। आप किस संस्करण पर हैं? –

+0

मैं इस युद्ध संस्करण का उपयोग कर रहा हूँ: 2.19.1। मेरा मानना ​​है कि यहां कुछ अजीब बात है। अपनी पाइपलाइन स्क्रिप्ट में, आप वह नहीं कर रहे हैं जिसे मैं प्राप्त करने की कोशिश कर रहा हूं। मेरे मामले में, मैं एक वैरिएबल वैल्यू को डिफ (जैसे आप) के साथ परिभाषित एक वैरिएबल वैल्यू देने की कोशिश कर रहा हूं। जैसा कि मैंने लिखा है, अगर मैं sh "।/Opt/setup।sh bla ", और यदि मेरी स्क्रिप्ट में मैं $ 1 गूंजने का प्रयास करता हूं, तो मैं स्पष्ट रूप से देख सकता हूं कि पैरामीटर" ब्लै "स्क्रिप्ट को नहीं दिया गया है। –

0

1. कृपया स्क्रिप्ट में घुंघराले ब्रेसिज़ को हटाने का प्रयास करें।

export ARCH=$1 
echo "architecture = " $ARCH 

2.In जेनकींस खोल:

def lib_arch='linux-ubuntu-14.04-x86_64-gcc4.8.4' 
sh ". /opt/setup.sh" $lib_arch 
+0

क्या आपने अपना सुझाव दिया है? यह दुर्घटनाग्रस्त हो जाता है। java.lang.NullPointerException: शून्य ऑब्जेक्ट पर संपत्ति '$ lib_arch' नहीं मिल सकती। मुझे विश्वास है कि मुझे कुछ से निपटना है पाइपलाइन जेनकींस के लिए सीमाएं नौकरियों। –

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