কীভাবে জটিল সমান্তরাল জেনকিনস পাইপলাইন তৈরি করবেন?


17

আমি আমাদের বেসপোক জেনকিনস সংহতিকে পাইপলাইনে রূপান্তর করতে আগ্রহী হয়েছি। তবে আমি কীভাবে এটি করব তা অনুভব করতে পারছি না।

জেনকিন্স স্ক্রিপ্টের সাহায্যে কেউ কি আমাকে সাহায্য করতে পারে যা নিম্নলিখিতগুলি করতে পারে?

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
@ বার্টগোয়েথালস আপনি পাইপলাইন ব্যবহার করতে পারেন এবং এখনও বিভিন্ন কাজ করতে পারেন। এটা আমি এখানে কিছু মিস করছি সম্ভবত।
এভিআই

1
আমি কিছুদিন আগে অনুরূপ কিছু করার চেষ্টা করছিলাম। আমি এটি নেস্টেড parallelকমান্ডগুলির সাহায্যে কাজ করতে পারি , তবে ব্লু ওশনে প্রবাহটি ঠিক দেখাচ্ছে না।
লনমওয়ার্ল্যাটি 16

1
@ বার্টগোয়েটলস আপনি কি আপনার মূল পাইপলাইন থেকে 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ভেরিয়েবল?
জেলেনবার্গার

@ জেলেনবার্গার যদি এই ভার্সগুলি খালি (নাল / ফাঁকা স্ট্রিং) হয়ে থাকে তবে এটি কাজ করবে না। তবে কমা ছাড়াই একক আইটেম (একক অ্যাপ্লিকেশন, বা নোড) পাস করা ভাল।
বিনোসুয়াফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.