जेनकिंस पाइपलाइन में सशर्त चरण / चरण


96

यदि आप एक विशिष्ट शाखा का निर्माण करते हैं, तो आप केवल एक निर्माण चरण / चरण कैसे चलाते हैं?

उदाहरण के लिए, केवल परिनियोजन चरण चलाएँ, यदि शाखा को कॉल किया जाता है deployment, तो बाकी सब समान छोड़ दें।

जवाबों:


188

घोषणात्मक पाइपलाइन सिंटैक्स में ही कर रहे हैं, नीचे कुछ उदाहरण हैं:

stage('master-branch-stuff'){
  agent any
  when{
    branch 'master'
  }
  steps {
    echo 'run this stage - ony if the branch = master branch'
  }
}

<b

stage('feature-branch-stuff') {
    agent label:'test-node'
    when { branch "feature/*" }
    steps {
        echo 'run this stage - only if the branch name started with feature/'
    }
}

<b

stage('expression-branch') {
    agent label:'some-node'
    when {
    expression {
        return env.BRANCH_NAME != 'master';
        }
    }
    steps {
        echo 'run this stage - when branch is not equal to master'
    }
}

<b

stage('env-specific-stuff') {
    agent label:'test-node'
    when { 
      environment name: 'NAME', value: 'this' 
    }
    steps {
        echo 'run this stage - only if the env name and value matches'
    }
}

आने वाले अधिक प्रभावी तरीके - https://issues.jenkins-ci.org/browse/JENKINS-41187
यह भी देखें - https://jenkins.io/doc/book/pipeline/syntax/#when


beforeAgent trueसशर्त को चलाने के लिए एजेंट को कताई से बचने के लिए निर्देश सेट किया जा सकता है, अगर सशर्त को यह तय करने के लिए गिट स्थिति की आवश्यकता नहीं है कि:

when { beforeAgent true; expression { return isStageConfigured(config) } }

रिलीज पोस्ट और डॉक्स


UPDATE
न्यू व्हेन क्लॉज
REF: https://jenkins.io/blog/2018/04/09/whats-in-declarative

बराबरी - दो मूल्यों की तुलना करता है - तार, चर, संख्या, बूलियन - और सच है अगर वे बराबर हैं। मुझे ईमानदारी से यकीन नहीं है कि हम इसे पहले जोड़ने से कैसे चूक गए! आप "नहीं के बराबर" का उपयोग करके "बराबर नहीं" कर सकते हैं ... संयोजन भी।

changeRequest - अपने सरलतम रूप में, यह सही होगा यदि यह पाइपलाइन परिवर्तन अनुरोध का निर्माण कर रही है, जैसे कि GitHub पुल अनुरोध। आप परिवर्तन अनुरोध के खिलाफ अधिक विस्तृत जांच भी कर सकते हैं, जिससे आप पूछ सकते हैं कि "क्या यह मास्टर शाखा के खिलाफ एक परिवर्तन अनुरोध है?" और भी बहुत कुछ।

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

टैग - बिल्डिंगटैग के अधिक विस्तृत समकक्ष, आपको टैग नाम के खिलाफ जांच करने की अनुमति देता है।


1
क्या मैं पोस्ट निर्माण कार्यों के लिए इसका उपयोग कर सकता हूं?
डग

1
मुझे लगता है कि जेनकींस निर्दिष्ट एजेंट को तब भी बचाते हैं, जब तक कि when{}स्थिति झूठी का मूल्यांकन न करे। :(
ट्रेकजाज़

1
@Trejkaz अब आप इससे beforeAgent trueबचने के लिए उपयोग कर सकते हैं
निक जोन्स

1
@NickJones वास्तव में, beforeAgentअब इसके लिए एक वैकल्पिक हल है।
तर्जुक

47

बस का उपयोग करें ifऔर env.BRANCH_NAME, उदाहरण:

    if (env.BRANCH_NAME == "deployment") {                                          
        ... do some build ...
    } else {                                   
        ... do something else ...
    }                                                                       

4
अगर मंच से पहले या बाद में होना चाहिए?
जेट

5
चरणों से पहले, चरण अंदर हो सकते हैं यदि शाखाएं
क्रिज़िस्तोफ क्रेसो

नहीं लगता कि प्लेसमेंट वास्तव में मायने रखता है
omu_negru

9
मैं घोषणात्मक पाइपलाइन के साथ यह काम नहीं कर सकता। क्या यह घोषणात्मक पाइपलाइनों के साथ काम करता है? वर्कफ़्लोस्क्रिप्ट: 9: एक चरण @ लाइन 9, कॉलम 9 की अपेक्षा की गई है (यदि (env.BRANCH_NAME == "परिनियोजन") {वर्कफ़्लोस्क्रिप्ट: 8: कोई चरण निर्दिष्ट नहीं @ लाइन 8, कॉलम 5. चरण {
पिचब्लैक 408

4
यह केवल स्क्रिप्टेड पाइपलाइनों में काम करता है। घोषणात्मक पाइपलाइनों के लिए, आपको चरण के अंदर स्क्रिप्ट {} का उपयोग करना चाहिए।
पेड्रो हेनरिक

1

अन्य उत्तरों के अनुसार मैं समानांतर चरणों के परिदृश्य को जोड़ रहा हूं:

pipeline {
    agent any
    stages {
        stage('some parallel stage') {
            parallel {
                stage('parallel stage 1') {
                    when {
                      expression { ENV == "something" }
                    }
                    steps {
                        echo 'something'
                    }
                }
                stage('parallel stage 2') {
                    steps {
                        echo 'something'
                    }
                }
            }
        }
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.