2017-10-27 32 views
5

ग्रूवी करने के लिए नए होने के नाते अंदर खोल स्क्रिप्ट निष्पादित करते समय, मैं नीचे की तरह ग्रूवी अंदर जेनकींस में निर्माण पाइपलाइन के हिस्से के रूप खोल स्क्रिप्ट निष्पादित करने के लिए कोशिश कर रहा था:जेनकींस पाइपलाइन: java.lang.NoSuchMethodError: ऐसा कोई डीएसएल विधि, ग्रूवी

stage('AMI ID EXTRACTION') { 
     sh 'AMI_ID=$(grep artifact_id /opt/repository/jenkins/workspace/crspng-CCPDev-ccp-ft-AMI/manifest.json | awk -F "\"" '{print $4}'| awk -F ":" '{print $2}')' 
     echo $AMI_ID 
     } 

stage ('ft-ami-extraction') 
{ 
     build job: 'crspng-CCPDev-ami-extraction' 
} 

लेकिन नीचे की तरह अपवाद हो रही समाप्त:

java.lang.NoSuchMethodError: No such DSL method 'AMI_ID=$(grep artifact_id /opt/repository/jenkins/workspace/crspng-CCPDev-ccp-ft-AMI/manifest.json | awk -F """ '

इंटरनेट पर कई समाधान की कोशिश कर के बाद भी कोई किस्मत, ग्रूवी अंदर खोल स्क्रिप्ट चुनौती यहाँ है। वाक्यविन्यास के साथ कोई मुद्दा?

+0

समान हवाले से समस्याओं में घिर गए उन लोगों के लिए, [इस GitHub सार] (https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4) मदद कर सकता है। – mkobit

+0

आपको शायद आपको लाइन में सभी उद्धरणों के लिए \ escape कोड जोड़ने की आवश्यकता होगी। पूरे पाइप-कमांड को शेल स्क्रिप्ट में डालने और इसे पाइपलाइन से चलाने पर विचार करें। – yorammi

उत्तर

2

हाँ, वाक्य रचना बुरा है। ज्यादातर समस्या जो मुझे दिखाई देती है उसे खोल कमांड के उद्धरण के साथ करना होता है। यह मान्य नहीं है:

sh 'AMI_ID=$(grep artifact_id /opt/repository/jenkins/workspace/crspng-CCPDev-ccp-ft-AMI/manifest.json | awk -F "\"" '{print $4}'| awk -F ":" '{print $2}')' 

आप {print $4}, जो शायद एक ग्रूवी बंद के रूप में व्याख्या की जा रही है के लिए एक उद्धृत स्ट्रिंग से बाहर तोड़ रहे हैं।

मुझे यकीन है कि मुझे समझ में क्यों यह त्रुटि यह है दे रहा है नहीं हूँ, लेकिन मुझे लगता है कि यदि आप सबसे आसानी से अपने शेल कमांड के हवाले से ट्रिपल एकल से इसे हल कर सकते हैं:

sh '''AMI_ID=$(grep artifact_id /opt/repository/jenkins/workspace/crspng-CCPDev-ccp-ft-AMI/manifest.json | awk -F "\"" '{print $4}'| awk -F ":" '{print $2}')''' 

मैं अगर यकीन नहीं है अगली गूंज लाइन काम करेगी, हालांकि, या तो। सबसे पहले, AMD_ID मौजूद नहीं है जहां आप echo चला रहे हैं। यह केवल खोल में मौजूद था। साथ ही, $ AMD_ID मान्य ग्रूवी चर के रूप में मौजूद नहीं है। मुझे पूरी तरह से यकीन नहीं है कि आप उस गूंज कथन के साथ क्या करने का प्रयास कर रहे हैं, लेकिन यदि यह वास्तव में चलता है, तो ऐसा करने वाला नहीं है जो आप उम्मीद करते हैं।

+0

गूंज AMI_ID मुद्रित करने के लिए था, मैं अद्यतन किया है प्रश्न – Jet

+0

खोल स्क्रिप्ट अभी चल रहा है लेकिन 'रही सिंटैक्स त्रुटि: असमाप्त उद्धृत स्ट्रिंग', क्या गलत हो सकता है? – Jet

+0

शायद यह इस वजह से है: awk -F "\" "शायद यह सिर्फ एक होना चाहिए" \ के बाद। साथ ही, मुझे अभी भी नहीं लगता कि 'echo $ AMI_ID' जो आप चाहते हैं वह करने जा रहा है। $ AMD_ID को कहीं भी ग्रोवी में घोषित नहीं किया गया है। यह केवल खोल में है। –

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