2017-09-28 51 views
5

मैं की तरह तोजेनकींस एक नीचे की ओर काम

pipeline { 
    stages { 
    stage('foo') { 
     steps{ 
     build job: 'my-job', propagate: true, wait: true 
     } 
    } 
    } 
} 

उद्देश्य नौकरी परिणाम पर इंतज़ार करो और असफल या सफल होने कि परिणाम के अनुसार करने के लिए है अपनी मौजूदा नौकरी से नीचे की ओर काम को गति प्रदान करने की कोशिश कर रहा हूँ के निर्माण पर विफल रहता है। जेनकींस हमेशा Waiting for non-job items is not supported संदेश में असफल रहा है। ऊपर वर्णित नौकरी में कोई पैरामीटर नहीं है और मल्टीब्रैंच पाइपलाइन प्लगइन का उपयोग करके मेरी बाकी नौकरियों की तरह परिभाषित किया गया है।

मैं सोच सकता हूं कि इस प्रकार की जेनकिन्स आइटम को बिल्ड चरण इनपुट के रूप में समर्थित नहीं है, लेकिन यह counterintuitive लगता है और यह मेरे लिए अवरोधक साबित होगा। क्या कोई पुष्टि कर सकता है कि यह वास्तव में मामला है?

यदि हां, तो क्या कोई भी कोई कामकाज सुझा सकता है?

धन्यवाद

+1

में मदद करता है, मैं यहां एक ही मुद्दे से निपट रहा हूं। दुर्भाग्यवश, इस विषय पर मुझे एकमात्र अन्य सामग्री मिल सकती है, अप्रैल से एक और स्टैक ओवरफ्लो पोस्ट है: https://stackoverflow.com/questions/43337070/how-to-invoke-a-jenkins-pipeline-a-in-another-jenkins- पाइपलाइन-बी –

उत्तर

1

यह JENKINS-45443 जो, तकनीकी सीमाओं के कारण टिप्पणी

पाइपलाइन नदी के ऊपर/नीचे की ओर काम प्रणाली के लिए कोई समर्थन नहीं है शामिल हिस्से में तथ्य यह है कि के कारण भाग में, की तरह दिखता है कोई स्थिर नौकरी कॉन्फ़िगरेशन नहीं है जो हाल ही में निर्माण मेटाडेटा का निरीक्षण करके इसे संभव बना देगा।

जब तक समाधान अभी भी चल रही है के रूप में, मैं यहाँ हमारे वैकल्पिक हल में शामिल हैं:

लेकिन यह भी वैकल्पिक हल प्रदान करते हैं। यह rtp (Rich Text Publisher) plugin पर आधारित है, जिसे आपको इसे काम करने के लिए स्थापित किया जाना चाहिए था:

हमारे जेनकिन्सफाइल के अंत में और नौकरी शुरू करने के बाद, हम इसे समाप्त करने की प्रतीक्षा करते हैं। उस स्थिति में, build() ऑब्जेक्ट को डाउनस्ट्रीम नौकरी चलाने के लिए उपयोग किया जाता है। हमें इससे जानकारी मिलती है।

चेतावनी: getAbsoluteUrl() फ़ंक्शन एक महत्वपूर्ण है। अपने जोखिम पर इसका इस्तेमाल करो!

def startedBld = build(
    job: YOUR_DOWNSTREAM_JOB, 
    wait: true, // VERY IMPORTANT, otherwise build() does not return expected object 
    propagate: true 
) 

// Publish the started build information in the Build result 
def text = '<h2>Downstream jobs</h2>Started job <a href="' + startedBld.rawBuild.getAbsoluteUrl() + '">' + startedBld.rawBuild.toString() + '</a>' 
rtp (nullAction: '1',parserName: 'HTML', stableText: text) 

यह समस्या JENKINS-29913 का हिस्सा है, पिछले दो साल के लिए खोला:

वर्तमान में DependencyGraphAbstractProject तक ही सीमित है, यह असंभव कार्यप्रवाह नीचे की ओर नदी के ऊपर/में हिस्सा ले सकें संबंध (मामलों में जहां नौकरी की श्रृंखला की आवश्यकता होती है, उदाहरण के लिए सुरक्षा बाधाओं के कारण)।

यह RFE (संवर्धन के लिए अनुरोध) JENKINS-37718, एक और (अनुत्तरित) Stack Overflow question के आधार पर किया जाता है।

7

मैं वास्तव में निर्माण चरण की परिभाषा पर अधिक ध्यान देकर इसे ठीक करने में कामयाब रहा। चूंकि मेरी सभी डाउनस्ट्रीम नौकरियों को मल्टीब्रैंच पाइपलाइन नौकरियों के रूप में परिभाषित किया गया है, इसलिए उनकी संरचना फ़ोल्डर की तरह है, फ़ोल्डर में प्रत्येक आइटम एक अलग नौकरी का प्रतिनिधित्व करता है। इस प्रकार डाउनस्ट्रीम नौकरियों को कॉल करने का सही तरीका build job: 'my-job', propagate: true, wait: true नहीं था, बल्कि build job: "my-job/my-branch-name", propagate: true, wait: true था।

इसके अलावा, इस मुद्दे से संबंधित लेकिन संबंधित मुद्दे से संबंधित, सुनिश्चित करें कि आपके पास हमेशा जेनकिंस मशीन पर कम से कम एक और निष्पादक मुक्त है, क्योंकि वाक्यविन्यास पर प्रतीक्षा प्रतीक्षा नौकरी के लिए एक धागा का उपभोग करेगा और एक के लिए नौकरी की प्रतीक्षा की जा रही है, और आप आसानी से संसाधन-भुखमरी प्रकार की स्थिति में खुद को पा सकते हैं।

आशा है कि यह

+0

तो मैंने जो बग उल्लेख किया है वह यहां लागू नहीं होता है? वैसे भी +1। – VonC

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