গিটহাব অর্গ প্লাগইন দিয়ে জেনকিনস পাইপলাইন (জেনকিনসফাইল) থেকে অন্য কাজটি কীভাবে ট্রিগার করতে পারি?


142

আমি কীভাবে এর ভিতরে থেকে অন্য কাজ তৈরি করতে পারি Jenkinsfile?

আমি ধরে নিয়েছি যে এই চাকরিটি একই গিথুব সংস্থার অধীনে অন্য একটি সংগ্রহস্থল , যার একটি ইতিমধ্যে নিজস্ব জেনকিনস ফাইল রয়েছে।

আমি কেবল শাখার নাম মাস্টার হলে এটি করতে চাই, কারণ এটি কোনও স্থানীয় শাখার ডাউনস্ট্রিম বিল্ডগুলি ট্রিগার করার কোনও মানে রাখে না।

হালনাগাদ:

stage 'test-downstream'
node {
     def job = build job: 'some-downtream-job-name'
}

তবুও, কার্যকর করার সময় আমি একটি ত্রুটি পাই

কোনও পলিমিটারাইজড চাকরির নাম-ডাউন-স্ট্রিম-জব-নাম পাওয়া যায় নি

আমি নিশ্চিত যে এই চাকরিটি জিনকিনসে বিদ্যমান এবং এটি বর্তমান সংস্থার ফোল্ডারের অধীনে রয়েছে। এটা তোলে অন্য পেশা নিজস্ব রয়েছে Jenkinsfile

দয়া করে নোট করুন যে এই প্রশ্নটি গিটহাব সংস্থা প্লাগইনের সাথে সুনির্দিষ্ট যা আপনার গিটহাব সংস্থা থেকে প্রতিটি সংগ্রহস্থল এবং শাখার জন্য কাজ স্বয়ংক্রিয়ভাবে তৈরি করে এবং বজায় রাখে।

উত্তর:


131

প্রথম সব, এটি একটি নির্বাহক স্লট একটি বর্জ্য মোড়ানো হয় buildধাপ node। আপনার আপস্ট্রিম নির্বাহক বিনা কারণে অকারণে বসে থাকবেন।

দ্বিতীয়ত, একটি মাল্টব্রাঞ্চ প্রকল্প থেকে, আপনি BRANCH_NAMEবর্তমান শাখায় যুক্তিযুক্ত শর্তযুক্ত করতে পরিবেশ পরিবর্তনশীল ব্যবহার করতে পারেন ।

তৃতীয়ত, jobপ্যারামিটারটি একটি নিখুঁত বা আপেক্ষিক কাজের নাম নেয়। আপনি যদি কোনও পথের যোগ্যতা ছাড়াই একটি নাম দেন, তবে এটি একই ফোল্ডারের অন্য কোনও কাজের কথা উল্লেখ করবে, যা কোনও মাল্ট্রাঞ্চ প্রকল্পের ক্ষেত্রে একই ভান্ডারের অন্য একটি শাখা বোঝায়।

সুতরাং আপনি যা বলতে চাইছেন সম্ভবত তা সম্ভবত is

if (env.BRANCH_NAME == 'master') {
    build '../other-repo/master'
}

2
ধন্যবাদ! যদি কোনও পরিবর্তন করে আপনি কীভাবে এই বিল্ডটি শেষ করার অপেক্ষা না করেই কীভাবে ট্রিগার করবেন তাও জানেন এটি ডাবল-আশ্চর্যজনক হবে :)
সোরিন

48
স্নিপেট জেনারেটর পরীক্ষা করুন :build job: '../other-repo/master', wait: false
জেসি গ্লিক

3
গতিশীল শাখার নাম সহ বিল্ড স্টেপ কল করার কোনও উপায় আছে কি? এমন কিছু build job: '../other-repo/$BRANCH_NAME'যেখানে $BRANCH_NAMEজেনকিনস পরিবেশের পরিবর্তনশীলটি মাল্টিব্র্যাঞ্চ প্রকল্প পরিচালিত শাখার সাথে সম্পর্কিত?
msteppe91

2
যদি ${BRANCH_NAME}পরিবেশের পরিবর্তনশীল হিসাবে উপলব্ধ হয়, সাধারণ স্ট্রিং প্রতিস্থাপনটি করবে। আপনার স্ট্রিংটি উদ্ধৃত করার জন্য কেবল এ "থেকে স্যুইচ করতে ভুলবেন না '। যেমনbuild job: "../other-repo/${BRANCH_NAME}"
সিন্ডারেজে

3
এর জন্য এপিআই লিঙ্ক build job: jenkins.io/doc/pipline/steps/pipline-build-step
কেটি

123

উপরে উল্লিখিত উত্তরগুলি ছাড়াও: আমি একটি দ্বিতীয় পাইপলাইনে সরল একটি সাধারণ প্যারামিটার দিয়ে একটি কাজ শুরু করতে চেয়েছিলাম এবং উত্তরটি https://dzone.com/refcardz/continuous-delivery-with-jenkins-work ফ্লোতে পেয়েছি ।

সুতরাং আমি ব্যবহার করেছি:

stage ('Starting ART job') {
    build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
}

11
বিল্ড
জবটি

5
buildকমান্ড দ্বারা চালিত জেনকিনসের কাজের BUILD_NUMBER কি ফিরে আসবে? নিম্নলিখিত স্তরের যে কোনও একটিতে BUILD_NUMBER কীভাবে অ্যাক্সেস করবেন? যে কমান্ড নথিভুক্ত যেখানে কেউ জানেন?
ব্যবহারকারী 909481

4
এটি build job: 'freestyle', parameters: [ string(name: 'param1', value:'test_param'), string(name:'dummy', value: "${index}")]আজকাল, জেনকিনস.আইও
ডক

তবে কীভাবে এই প্যারামিটারগুলি দ্বিতীয়
সৌম্য

2
মজার বিষয় হল যথেষ্ট build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]] কাজ আমার পক্ষে হয়নি তবে: build job: 'RunArtInTest', parameters: [string(name: 'systemname', value: "${VALUE}")] কাজ করেছেন
আলবার্তো সি

24

buildপাইপলাইনে কমান্ডটি রয়েছে জেনকিনসে অন্যান্য কাজগুলি ট্রিগার করার জন্য।

গিথুবের উপর উদাহরণ

চাকরি অবশ্যই জেনকিনসে থাকতে পারে এবং প্যারামিট্রাইজ করা যায়। শাখা হিসাবে, আমি অনুমান আপনি গিট থেকে এটি পড়তে পারেন


3
আমি যোগ করার চেষ্টা করেছি build job: 'jobnameকিন্তু আমি এই ত্রুটি No parameterized job named jobname foundপেয়েছি এবং আমি আপনাকে নিশ্চিত করতে পারি যে সংস্থা নামে একটি ফোল্ডারে একই স্তরে এই নামে একটি কাজ আছে।
সোরিন

1
হ্যাঁ একটি চাকরি আছে, তবে সেই কাজটি প্যারামিটারাইজড হয় না। আমি কীভাবে গিটহাব সংস্থা প্লাগইন দ্বারা তৈরি একটি কাজের পরামিতি করব তা বোঝার চেষ্টা করছি
ইয়েওয়েন

6
কাজের নামের ফর্ম্যাটটি হ'ল:build job: "${ORGANISATION_NAME}/${REPO_NAME}/master"
সাহিল আহুজা

2
@ সাহিলআহুজা এটি সম্পূর্ণ নির্বিচারে এবং আপনার জেনকিনস লেআউটের উপর ভিত্তি করে এবং যদি আপনি একটি নিখুঁত পথ ব্যবহার করতে চান তবে আপনাকে একটি দিয়ে শুরু করা দরকার /। আপেক্ষিক পথগুলি ভাল; সোরিনের সমস্যাটি সম্ভবত সম্ভবত ছিল যে জব buildকলিংটি একটি মাল্টিব্র্যাঞ্চ কাজ ছিল যার অর্থ একটি পথ একই কাজের jobnameশাখা তৈরির চেষ্টা করবে jobname; এটি ../jobname/branchnameপরিবর্তে হওয়া দরকার
মাইকেল মরোজেক

এটি ভাল কাজ করে তবে, নির্দিষ্ট শাখাটি উপস্থিত না থাকলে কী হবে?
জাইমে আলকান্টারা আর্নেলা

17

আপনি জেনকিনস পাইপলাইনbuild job থেকে পদক্ষেপটি ব্যবহার করতে পারেন (ন্যূনতম জেনকিন্স প্রয়োজনীয়তা: 2.130)।

buildপদক্ষেপের জন্য এখানে সম্পূর্ণ এপিআই : https://jenkins.io/doc/pipline/steps/pipline-build-step/

কীভাবে ব্যবহার করবেন build:

  • job: নির্মাণের জন্য একটি প্রবাহী কাজের নাম। অন্য পাইপলাইন কাজ হতে পারে তবে আরও একটি ফ্রিস্টাইল বা অন্য প্রকল্প।
    • যদি এই আপস্ট্রিম পাইপলাইন কাজের মতো কাজ একই ফোল্ডারে থাকে তবে একটি সাধারণ নাম ব্যবহার করুন ;
    • পরিবর্তে আপনি পছন্দ মতো আপেক্ষিক পাথ ব্যবহার করতে পারেন../sister-folder/downstream
    • অথবা আপনি মত পরম পাথ ব্যবহার করতে পারেন/top-level-folder/nested-folder/downstream

পরম হিসাবে একটি শাখা ব্যবহার করে অন্য একটি কাজ ট্রিগার করুন

আমার সংস্থায় আমাদের অনেক শাখায় "/" অন্তর্ভুক্ত রয়েছে। আপনাকে অবশ্যই "/" এর যে কোনও উদাহরণ "% 2F" দিয়ে প্রতিস্থাপন করতে হবে (যেমন এটি কাজের URL এ প্রদর্শিত হবে)।

এই উদাহরণে আমরা আপেক্ষিক পথগুলি ব্যবহার করছি

    stage('Trigger Branch Build') {
        steps {
            script {
                    echo "Triggering job for branch ${env.BRANCH_NAME}"
                    BRANCH_TO_TAG=env.BRANCH_NAME.replace("/","%2F")
                    build job: "../my-relative-job/${BRANCH_TO_TAG}", wait: false
            }
        }
    }

পরম হিসাবে বিল্ড নম্বর ব্যবহার করে অন্য একটি কাজ ট্রিগার করুন

build job: 'your-job-name', 
    parameters: [
        string(name: 'passed_build_number_param', value: String.valueOf(BUILD_NUMBER)),
        string(name: 'complex_param', value: 'prefix-' + String.valueOf(BUILD_NUMBER))
    ]

সমান্তরালভাবে অনেক কাজকে ট্রিগার করুন

সূত্র: https://jenkins.io/blog/2017/01/19/converting-conditional-to-pipline/

সমান্তরাল সম্পর্কে আরও তথ্য এখানে: https://jenkins.io/doc/book/pipline/syntax/# সমান্তরাল

    stage ('Trigger Builds In Parallel') {
        steps {
            // Freestyle build trigger calls a list of jobs
            // Pipeline build() step only calls one job
            // To run all three jobs in parallel, we use "parallel" step
            // https://jenkins.io/doc/pipeline/examples/#jobs-in-parallel
            parallel (
                linux: {
                    build job: 'full-build-linux', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                },
                mac: {
                    build job: 'full-build-mac', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                },
                windows: {
                    build job: 'full-build-windows', parameters: [string(name: 'GIT_BRANCH_NAME', value: env.BRANCH_NAME)]
                },
                failFast: false)
        }
    }

বা বিকল্পভাবে:

    stage('Build A and B') {
            failFast true
            parallel {
                stage('Build A') {
                    steps {
                            build job: "/project/A/${env.BRANCH}", wait: true
                    }
                }
                stage('Build B') {
                    steps {
                            build job: "/project/B/${env.BRANCH}", wait: true
                    }
                }
            }
    }

3

ব্যবহারের বিল্ড কাজ প্লাগইন যাতে কাজের জন্য Jenkins ফাইল থেকে অন্যান্য কাজ আরম্ভ করতে ট্রিগারের জন্য। আপনি আপনার মৃত্যুদণ্ডে বিভিন্ন যুক্তি যুক্ত করতে পারেন যেমন সমান্তরাল, নোড এবং এজেন্টগুলির বিকল্প এবং বহিরাগত কাজগুলি ট্রিগার করার পদক্ষেপগুলি। আমি এর জন্য কিছু সহজেই পঠনযোগ্য কুকবুকের উদাহরণ দিয়েছি।

1. শর্তযুক্ত উদাহরণ সহ জেনকিন্স ফাইল থেকে বাহ্যিক কাজ ট্রিগার করার উদাহরণ:

if (env.BRANCH_NAME == 'master') {
  build job:'exactJobName' , parameters:[
    string(name: 'keyNameOfParam1',value: 'valueOfParam1')
    booleanParam(name: 'keyNameOfParam2',value:'valueOfParam2')
 ]
}

শর্তসাপূর্ণ উদাহরণ সহ জেনকিনস ফাইল থেকে একাধিক কাজ সঞ্চারকারী উদাহরণ:

 def jobs =[
    'job1Title'{
    if (env.BRANCH_NAME == 'master') {
      build job:'exactJobName' , parameters:[
        string(name: 'keyNameOfParam1',value: 'valueNameOfParam1')
        booleanParam(name: 'keyNameOfParam2',value:'valueNameOfParam2')
     ]
    }
},
    'job2Title'{
    if (env.GIT_COMMIT == 'someCommitHashToPerformAdditionalTest') {
      build job:'exactJobName' , parameters:[
        string(name: 'keyNameOfParam3',value: 'valueOfParam3')
        booleanParam(name: 'keyNameOfParam4',value:'valueNameOfParam4')
        booleanParam(name: 'keyNameOfParam5',value:'valueNameOfParam5')
     ]
    }
}

তবে কীভাবে 2 য় কাজের ক্ষেত্রে প্যারামিটারগুলি গ্রহণ এবং ব্যবহার করা যায়
সৌম্য

2
@Gentle। আপনি প্যারাম.সেসটেমনাম হিসাবে পাস হওয়া প্যারামিটারটি অ্যাক্সেস করতে পারেন
পঙ্কজ শিন্ডে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.