मैं GitHub Org Plugin के साथ jenkins पाइपलाइन (jenkinsfile) से दूसरी नौकरी कैसे ट्रिगर कर सकता हूं?


142

मैं अंदर से दूसरी नौकरी के निर्माण को कैसे ट्रिगर कर सकता हूं Jenkinsfile?

मुझे लगता है कि यह नौकरी उसी गिथब संगठन के तहत एक और रिपॉजिटरी है , जो पहले से ही अपनी जेनकिंस फ़ाइल है।

मैं यह केवल तभी करना चाहता हूं जब शाखा का नाम मास्टर है, क्योंकि यह किसी भी स्थानीय शाखाओं के डाउनस्ट्रीम बिल्ड को ट्रिगर करने का कोई मतलब नहीं है।

अपडेट करें:

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

फिर भी, निष्पादित होने पर मुझे एक त्रुटि मिलती है

कुछ डाउनट्रीम-जॉब-नाम के बिना कोई पैरामीटर वाली नौकरी नहीं मिली

मुझे यकीन है कि यह नौकरी जेनकिंस में मौजूद है और वर्तमान संगठन के समान है। यह एक और काम है जिसका अपना है Jenkinsfile

कृपया ध्यान दें कि यह प्रश्न GitHub Organisation Plugin के लिए विशिष्ट है जो आपके GitHub संगठन से प्रत्येक रिपॉजिटरी और शाखा के लिए ऑटो बनाता है और नौकरियों को बनाए रखता है।

जवाबों:


131

सबसे पहले, यह buildकदम को लपेटने के लिए एक निष्पादक स्लॉट की बर्बादी है node। आपका अपस्ट्रीम निष्पादक बिना किसी कारण के बेकार बैठ जाएगा।

दूसरा, एक मल्टीब्रांच परियोजना से, आप BRANCH_NAMEवर्तमान शाखा पर तर्क सशर्त बनाने के लिए पर्यावरण चर का उपयोग कर सकते हैं ।

तीसरा, jobपैरामीटर एक पूर्ण या रिश्तेदार नौकरी का नाम लेता है। यदि आप किसी भी पथ योग्यता के बिना एक नाम देते हैं, तो वह उसी फ़ोल्डर में किसी अन्य नौकरी को संदर्भित करेगा, जो मल्टीब्रांच प्रोजेक्ट के मामले में उसी रिपॉजिटरी की एक और शाखा का मतलब होगा।

इस प्रकार आपका लिखने का मतलब शायद है

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

2
धन्यवाद! अगर किसी बदलाव से आप यह भी जानते हैं कि इस निर्माण को कैसे शुरू किया जाए तो इसे खत्म करने के लिए इंतजार किए बिना इसे दोगुना करना होगा :)
sorin

48
स्निपेट जेनरेटर की जाँच करें :build job: '../other-repo/master', wait: false
जेसी ग्लिक

3
क्या डायनेमिक ब्रांच नाम के साथ बिल्ड स्टेप को कॉल करने का कोई तरीका है? की तरह कुछ build job: '../other-repo/$BRANCH_NAME'जहां $BRANCH_NAMEजेनकींस वातावरण चर Multibranch परियोजना चल शाखा से संबंधित है?
15

2
अगर ${BRANCH_NAME}एक पर्यावरण चर के रूप में उपलब्ध है, सरल स्ट्रिंग प्रतिस्थापन होगा। बस अपनी स्ट्रिंग उद्धृत करने के लिए "से स्विच करना सुनिश्चित करें '। उदाbuild job: "../other-repo/${BRANCH_NAME}"
सिंडरज़े

3
इसके लिए एपीआई लिंक build job: jenkins.io/doc/pipeline/steps/pipeline-build-step
केटी

123

उपर्युक्त उत्तर के अलावा: मैं एक साधारण पाइपलाइन के साथ नौकरी शुरू करना चाहता था जो एक दूसरी पाइपलाइन से गुजरी और इसका जवाब https://dzone.com/refcardz/continuous-delivery-with-jenkins-workflow पर मिला ।

तो मैंने इस्तेमाल किया:

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

11
बिल्ड जॉब को एक चरण में एम्बेड किया जाना चाहिए (संस्करण 0.5 के साथ शुरू)
rherbe

5
क्या buildकमांड द्वारा लौटाए गए जेनकिंस जॉब का BUILD_NUMBER काम है ? निम्नलिखित चरणों में से एक में BUILD_NUMBER का उपयोग कैसे करें? किसी को भी पता है कि उस आदेश को कहां प्रलेखित किया गया है?
user909481

4
यह build job: 'freestyle', parameters: [ string(name: 'param1', value:'test_param'), string(name:'dummy', value: "${index}")]आजकल, jenkins.io/doc/pipeline/examples/#jobs-in-parallel
BartBiczBoży

लेकिन इन मापदंडों का उपयोग कैसे करें 2 नौकरी में पारित
कोमल

2
दिलचस्प रूप से build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]] मेरे लिए बहुत काम नहीं आया लेकिन: build job: 'RunArtInTest', parameters: [string(name: 'systemname', value: "${VALUE}")] काम किया
अल्बर्टो C

24

buildपाइपलाइन में कमांड जेनकिंस में अन्य नौकरियों को ट्रिगर करने के लिए है।

जीथुब पर उदाहरण

नौकरी जेनकिंस में मौजूद होनी चाहिए और पैरामीट्रिक हो सकती है। शाखा के लिए, मुझे लगता है कि आप इसे गिट से पढ़ सकते हैं


3
मैंने जोड़ने की कोशिश की, build job: 'jobnameलेकिन मुझे यह त्रुटि मिली No parameterized job named jobname foundऔर मैं आपको आश्वासन दे सकता हूं कि संगठन फ़ोल्डर में समान स्तर पर इस नाम के साथ एक नौकरी है।
सोरिन

1
हां नौकरी है, लेकिन उस नौकरी का कोई मापदण्ड नहीं है। मैं यह समझने की कोशिश कर रहा हूं कि कैसे GitHub संगठन प्लगइन द्वारा बनाई गई नौकरी को कैसे पैरामीटर बनाया
जाए

6
नौकरी का नाम प्रारूप है:build job: "${ORGANISATION_NAME}/${REPO_NAME}/master"
साहिल आहूजा

2
@SahilAhuja यह पूरी तरह से मनमाना है और आपके जेनकिंस लेआउट पर आधारित है, और यदि आप एक निरपेक्ष पथ का उपयोग करना चाहते हैं, तो आपको इसके साथ शुरू करना होगा /। रिश्तेदार रास्ते ठीक हैं; सॉरिन की समस्या शायद यह थी कि जॉब कॉलिंग buildएक मल्टीब्रंच जॉब थी, जिसका मतलब है कि एक रास्ता उसी जॉब jobnameकी ब्रांच बनाने की कोशिश करेगा jobname; इसके ../jobname/branchnameबजाय इसकी आवश्यकता है
माइकल Mrozek

यह अच्छा काम करता है लेकिन, यदि निर्दिष्ट शाखा मौजूद नहीं है तो क्या होगा?
Jaime Alcántara Arnela

17

आप जेनकिंस पाइपलाइन (न्यूनतम जेनकींस आवश्यकता: 2.130) build jobसे कदम का उपयोग कर सकते हैं ।

यहाँ buildचरण के लिए पूर्ण एपीआई : https://jenkins.io/doc/pipeline/steps/pipeline-build-epep/

कैसे उपयोग करें 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/pipeline/syntax/#parallel

    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

जेनकिंस फ़ाइल से अन्य नौकरियों को ट्रिगर करने के लिए उस कार्य के लिए बिल्ड जॉब प्लगइन का उपयोग करें । आप अपने निष्पादन में विभिन्न प्रकार के तर्क जोड़ सकते हैं जैसे कि समानांतर, नोड और एजेंटों के विकल्प और बाहरी नौकरियों को ट्रिगर करने के लिए कदम। मैंने उसके लिए कुछ आसानी से पढ़ी जाने वाली कुकबुक का उदाहरण दिया।

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
@सज्जन। आप उत्तीर्ण पैरामाटर को params.systemname
पंकज शिंदे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.