एक जटिल समानांतर जेनकिंस पाइपलाइन का निर्माण कैसे करें?


17

मुझे हमारे bespoke Jenkins एकीकरण को एक पाइपलाइन में बदलने में दिलचस्पी है। हालाँकि, मुझे यह पता नहीं लग सकता है कि यह कैसे करना है।

क्या कोई मुझे जेन्किंस स्क्रिप्ट के साथ मदद कर सकता है जो निम्नलिखित कर सकता है?

1---2---3-----------9---10
    |           |
    |---4-------|
    |           |
    |---5---6---|
        |       |
        |---7---|

1: Start pipeline
10: End pipeline
5: Build some files
   * needed by 6, 7,
   * needed as artifacts at the end
2, 3, 4, 6, 7: Have jUnit result files, should be available at end of
   test (somewhere), even if one failed

क्या यह भी संभव है? या मुझे सिर्फ 3, 4, 5 के बाद शामिल होना चाहिए? ऐशे ही:

1---2---3-------6-------9---10
    |       |   |   |
    |---4---|   7---|
    |       |
    |---5---|

1
मैं दूसरे विकल्प के लिए मतदान करूंगा, अगर जरूरत पड़ी तो टूटने और आसानी से फैलने की संभावना कम लगती है।
तेन्सीबाई

2
संभवतः घना हो रहा है, लेकिन मुझे समझ में नहीं आया है कि अधिक जटिल संस्करण अभी तक क्या जोड़ता है। क्या आप "9" क्या दस्तावेज करते हैं और यह किस पर निर्भर करता है? यदि आप इसे संशोधित और जोड़ना चाहते हैं, तो कोई 8 नहीं है। :)
बर्टेटक

1
@BertGoethals आप पाइपलाइन का उपयोग कर सकते हैं और अभी भी अलग-अलग काम कर सकते हैं। यह संभव है कि मुझे यहाँ कुछ याद आ रहा है।
एवी

1
मैं कुछ दिन पहले ऐसा ही कुछ करने की कोशिश कर रहा था। मैं इसे नेस्टेड parallelकमांड के साथ काम करने के लिए प्राप्त कर सकता था, लेकिन ब्लूऑकियन में प्रवाह सही नहीं लगा।
Lawnmowerlatte

1
@BertGoethals क्या आप अपनी मुख्य पाइपलाइन से 5 और फिर 6 और 7 कर एक और पाइपलाइन शुरू नहीं कर सकते?
तेनसीबाई

जवाबों:


9

मेरे प्रश्न पर टिप्पणियों के आधार पर, और कुछ बुनियादी परीक्षण निम्नलिखित काम करने लगते हैं:


4

मेरे पास एक समान स्थिति थी जिसमें मैं अन्य समानांतर नौकरियों के धागे को दूसरे समानांतर एक के अंदर घोंसला बनाना चाहता था। इस कोड ने मेरे लिए काम किया:

def performDeploymentStages(String node, String app) {
    stage("build") {
        echo "Building the app [${app}] on node [${node}]"
    }
    stage("deploy") {
        echo "Deploying the app ${app}] on node [${node}]"
    }
    stage("test") {
        echo "Testing the app [${app}] on node [${node}]"
    }
}

pipeline {
    agent {
        label 'master'
    }
    parameters {
        string(name: 'NODES', defaultValue: '1,2,3', description: 'Nodes to build, deploy and test')
        choice(name: 'ENV', choices: 'qa', description: 'Environment')
        string(name: 'APPS', defaultValue: 'app01,app02', description: 'App names')
    }

    stages {
        stage('parallel stage') {
            steps {
                script {
                    def nodes = [:]
                    for (node in params.NODES.tokenize(',')) {
                        def apps = [:]
                        for (app in params.APPS.tokenize(',')) {
                            performDeploymentStages(node, app)
                        }
                        parallel apps
                    }
                    parallel nodes
                }
            }
        }
    }
}

समानांतर चलाने से पूरी तरह से लाभ उठाने के लिए पर्याप्त निष्पादकों को असाइन करना याद रखें।


क्या यह स्निपेट मानों nodesऔर appsचर को मान दिए बिना काम करता है ?
जलेनबर्गर

@jellenberger यह काम नहीं करेगा यदि ये संस्करण खाली (अशक्त / खाली स्ट्रिंग) होंगे। लेकिन अल्पविराम के बिना एकल आइटम (एकल ऐप, या नोड) को पास करना ठीक है।
बिन्नोसुफ़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.