2016-10-03 28 views
19

में चर परिभाषित नहीं कर सकता मैं एक घोषणात्मक जेनकींस पाइपलाइन स्क्रिप्ट बनाने की कोशिश कर रहा हूं लेकिन सरल परिवर्तनीय घोषणा के साथ समस्याएं हैं।जेनकींस: पाइपलाइन चरण

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
WorkflowScript: 5: Expected a step @ line 5, column 13. 
      def foo = "foo" 
     ^

मैं जेनकींस 2.7.4 और पाइपलाइन 2.4 पर हूँ:

pipeline { 
    agent none 
    stages { 
     stage("first") { 
      def foo = "foo" // fails with "WorkflowScript: 5: Expected a step @ line 5, column 13." 
      sh "echo ${foo}" 
     } 
    } 
} 

हालांकि, मैं इस त्रुटि मिलती है:

यहाँ मेरी स्क्रिप्ट है।

उत्तर

30

जेनकिंस पाई के लिए घोषणात्मक मॉडल पेलिन्स में सिंटैक्स का एक प्रतिबंधित सबसेट है जो stage ब्लॉक - see the syntax guide for more info में अनुमति देता है। आप script { ... } ब्लॉक में अपने चरणों को लपेटकर उस प्रतिबंध को बाईपास कर सकते हैं, लेकिन नतीजतन, आप script ब्लॉक के भीतर वाक्यविन्यास, पैरामीटर इत्यादि के सत्यापन को खो देंगे।

15

मुझे लगता है कि निर्दिष्ट पंक्ति से त्रुटि नहीं आ रही है लेकिन पहले 3 लाइनों से। बजाय इस प्रयास करें:

node { 
    stage("first") { 
    def foo = "foo" 
    sh "echo ${foo}" 
    } 
} 

मुझे लगता है कि आप कुछ अतिरिक्त लाइनें कि मान्य नहीं हैं था ...

संपादित

declaractive pipeline model documentation से ऐसा प्रतीत होता है कि आप एक environment घोषणा का उपयोग करना होगा अपने चर घोषित करने के लिए ब्लॉक, उदाहरण:

pipeline { 
    environment { 
    FOO = "foo" 
    } 

    agent none 
    stages { 
     stage("first") { 
      sh "echo ${FOO}" 
     } 
    } 
} 
+0

वह नए [कथात्मक पाइपलाइन मॉडल] (उपयोग कर रहा है https://github.com/jenkinsci/pipeline-model-definition -प्लगिन/विकी /% 20 प्रारंभ किया गया) वाक्यविन्यास, यही कारण है कि हम जो जानते हैं उससे अलग है ;-) – StephenKing

+1

ओह क्षमा करें कि नया घोषणात्मक पाइपलाइन मॉडल नहीं देखा, मैंने तदनुसार अपनी पोस्ट संपादित की! – Pom12

3

@ Pom12, @abayer से सहमत हैं। इस सवाल का जवाब आप जोड़ने की जरूरत को पूरा करने के स्क्रिप्ट ब्लॉक

इस तरह somethign का प्रयास करें:

pipeline { 
    agent any 
    environment { 
     ENV_NAME = "${env.BRANCH_NAME}" 
    } 

    // ---------------- 

    stages { 
     stage('Build Container') { 
      steps { 
       echo 'Building Container..' 

       script { 
        if (ENVIRONMENT_NAME == 'development') { 
         ENV_NAME = 'Development' 
        } else if (ENVIRONMENT_NAME == 'release') { 
         ENV_NAME = 'Production' 
        } 
       } 
       echo 'Building Branch: ' + env.BRANCH_NAME 
       echo 'Build Number: ' + env.BUILD_NUMBER 
       echo 'Building Environment: ' + ENV_NAME 

       echo "Running your service with environemnt ${ENV_NAME} now" 
      } 
     } 
    } 
} 
+0

ध्यान दें कि यह उदाहरण मानता है कि पहले से ही परिभाषित पर्यावरण चर "ENVIRONMENT_NAME" जेनकींस तक पहुंच योग्य है। – Alberto

संबंधित मुद्दे