2017-06-06 12 views
6

करने के लिए नीचे सभी पैरामीटर भेजने मैं buildall जो इस तरह दिखता है नाम के एक पाइपलाइन का काम है:जेनकींस पाइप लाइन नीचे की ओर नौकरियों

pipeline { 
    stages { 
     stage("job1") { 
      build job: "job1" 
     } 
    } 
} 

buildall काम 25 पैरामीटर है। मैं बिल्डल के पैरामीटर जॉब 1 को पास करना चाहता हूं। क्या प्रत्येक पैरामीटर मैन्युअल रूप से निर्दिष्ट करने के बजाय, मैं ऐसा कर सकता हूं?

इस सवाल में: Pipeline pass parameters to downstream jobs एक उप प्रश्न पूछा गया था, लेकिन जवाब कभी नहीं: या और भी बेहतर, वहाँ एक कम बोझिल जिस तरह मैं सिर्फ नीचे की ओर काम करने के लिए सभी पाइप लाइन पैरामीटर पास कर सकते हैं।

यह वही प्रश्न है जो मेरे पास है।

pipeline { 
    agent any 
    parameters { 
     string(name: 'PARAM1', description: 'Param 1?') 
     string(name: 'PARAM2', description: 'Param 2?') 
    } 
    stages { 
     stage('Example') { 
      steps { 
       echo "${params}" 
       script { 
        def myparams = currentBuild.rawBuild.getAction(ParametersAction).getParameters() 
        build job: 'downstream-pipeline-with-params', parameters: myparams 
       }  
      } 
     } 
    } 
} 

वापसी::

उत्तर

6

निम्नलिखित (मैं इसे बड़े पैमाने पर परीक्षण नहीं किया है, हालांकि) काम करने के लिए लगता है rawBuild और getAction तक पहुँचने के लिए आप ग्रूव सैंडबॉक्स अक्षम या जेनकींस प्रबंधित तहत जेनकींस में इन हस्ताक्षरों का अनुमोदन करना है > स्क्रिप्ट स्वीकृति में प्रक्रिया। यह संवाद आपको दिखाएगा कि आप एक सुरक्षा भेद्यता पेश कर सकते हैं। तो यह आपके पर्यावरण पर निर्भर करता है यदि आप यह जोखिम लेना चाहते हैं या नहीं।

+0

धन्यवाद @ फिलिप! यह काम करता हैं। मैं आपकी सहायता के बिना इसे समझ नहीं पाया होता। –

+0

उन्होंने ऐसा क्यों किया है? उनके पास * पैरामीटर वैल्यू क्लास का एक अजीब सेट है, जिसे बिल्ड करने के लिए इस्तेमाल किया जाता है, लेकिन पूरे सेट को वर्तमान निर्माण में उजागर नहीं किया जाता है? मैं इस जेनकींस पाइपलाइनों से शुरू कर रहा था लेकिन मैं इसे स्थगित करने के बारे में सोच रहा हूं, विशेष रूप से जब "वर्तमान निर्माण पैरामीटर" को पारित करने के लिए एक विशिष्ट उपयोग केस था जो पाइपलाइनों में समर्थित नहीं है – lqbweb

0

आप पैरामीटर प्रकार के बारे में परवाह नहीं करते हैं, इस दृष्टिकोण ग्रूवी सैंडबॉक्स अक्षम करने की आवश्यकता नहीं है - यह बस मानता है कि सभी मापदंडों एक स्ट्रिंग के रूप में इलाज किया जा सकता ("फ़ाइल" के लिए काम नहीं करेगा , उदाहरण) के लिए:

def myparams = params.collect{ 
    string(name: it.key, value: it.value) 
} 
build job: 'downstream-job', parameters: myparams 

यह पूर्वनिर्धारित गैर स्ट्रिंग पैरामीटर प्रकार प्रबंधित करने तर्क का विस्तार करने के लिए बहुत मुश्किल नहीं होगा, लेकिन मैं मानता हूँ कि यह आवश्यक नहीं होना चाहिए। बिल्ड() डीएसएल क्लोजर द्वारा आवश्यक स्वरूप में पैरामीटर का पर्दाफाश करने के लिए एक बेहतर तरीका होगा, जिसमें वर्तमान में "पैरा" ग्लोबल वैरिएबल के माध्यम से दिखाई नहीं दे रहा है, या शायद बूलियन जोड़ने के लिए, उदाहरण के लिए:

// I wish: 
build job: 'downstream-job', includeMyParameters: true, parameters: anyExtras 
संबंधित मुद्दे