2017-02-10 11 views
9

मैं एक समारोह के अंदर के साथ एक कार्य बनाने के लिए कोशिश कर रहा हूँ:जेनकींस पाइपलाइन कॉन्फ़िगरेशन के अंदर फ़ंक्शन को परिभाषित और उपयोग कैसे करें?

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params = [:]) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 


node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1') 
    } 
} 

लेकिन यह मुझे एक अपवाद gves: java.lang.NoSuchMethodError: ऐसा कोई डीएसएल विधि 'BuildAndCopyMibsHere' चरणों के बीच में पाया

क्या पाइपलाइन स्क्रिप्ट के भीतर एम्बेडेड फ़ंक्शंस का उपयोग करने का कोई तरीका है?

उत्तर

8

की, आप $ नहीं जोड़ना चाहिए जब आप तार (अपवाद, $class है आप पहली बार समारोह कर रहे हैं में तो यह होना चाहिए से बाहर हैं पहले:

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 
... 

अब, अपनी समस्या के लिए के रूप में , दूसरा समारोह दो तर्क करते समय आप केवल कॉल पर एक तर्क ही उपलब्ध करा रहे लेता है या तो आप कॉल पर दो तर्क की आपूर्ति करने के लिए है:।

... 
node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1', null) 
    } 
} 

... या आप के लिए एक डिफ़ॉल्ट मान जोड़ने की जरूरत फंक्शंस 'दूसरा तर्क है एनटी:

def BuildAndCopyMibsHere(projectName, params = null) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere($projectName) 
} 
+0

ठीक है। अब यह कहता है 'java.lang.UnsupportedOperationException: इंटरफ़ेस java.util.List' के कार्यान्वयन के साथ $ वर्ग निर्दिष्ट करना होगा। पीएस मूल कोड को सही किया गया - $ प्रतिस्थापित किया गया जहां तार तारों में नहीं हैं। –

+1

अजीब, एक अलग समस्या की तरह लगता है, कॉपी आर्टेफैक्ट चरण को पुन: उत्पन्न करने के लिए स्निपेट जनरेटर का उपयोग करने का प्रयास करें। यदि यह अभी भी विफल रहता है, तो मैं एक नए प्रश्न पोस्ट करने का सुझाव दूंगा क्योंकि यह एक अलग मुद्दा है। –

-1

हल हो गया! कॉल build job: project, parameters: paramsjava.lang.UnsupportedOperationException: must specify $class with an implementation of interface java.util.List त्रुटि params = [:] त्रुटि में विफल रहता है। params = null के साथ इसे बदलने से समस्या हल हो गई। यहां नीचे कामकाजी कोड।

def doCopyMibArtefactsHere(projectName) { 
    step ([ 
     $class: 'CopyArtifact', 
     projectName: projectName, 
     filter: '**/**.mib', 
     fingerprintArtifacts: true, 
     flatten: true 
    ]); 
} 

def BuildAndCopyMibsHere(projectName, params = null) { 
    build job: project, parameters: params 
    doCopyMibArtefactsHere(projectName) 
} 
node { 
    stage('Prepare Mib'){ 
     BuildAndCopyMibsHere('project1') 
    } 
} 
+0

मेरा बुरा, अच्छा है कि आपको अंतिम त्रुटि हल हो गई है :) मैंने ऊपर अपना जवाब अपडेट कर लिया है। –

+0

मुझे सही तरीके से इंगित करने के लिए धन्यवाद) –

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