2016-10-03 4 views
19

Ich versuche, ein deklaratives Jenkins-Pipeline-Skript zu erstellen, aber Probleme mit der einfachen Variablendeklaration.Jenkins: Variable in Pipeline-Stufe kann nicht definiert werden

Hier ist mein Skript:

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

Allerdings habe ich diesen Fehler:

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

ich auf Jenkins bin 2.7.4 und Pipeline 2.4.

Antwort

30

Das deklarative Modell für Jenkins Pi Pelines hat eine eingeschränkte Teilmenge von Syntax, die es in den stage Blöcken erlaubt - see the syntax guide for more info. Sie können diese Einschränkung umgehen, indem Sie Ihre Schritte in einen script { ... }-Block einschließen. Dadurch verlieren Sie jedoch die Validierung der Syntax, der Parameter usw. innerhalb des Blocks script.

15

Ich denke, Fehler kommt nicht von der angegebenen Zeile, sondern von den ersten 3 Zeilen. Versuchen Sie stattdessen:

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

Ich glaube, du zusätzliche Linien hatten, die nicht gültig sind ...

EDIT

Von declaractive pipeline model documentation, so scheint es, dass Sie eine environment Erklärung verwenden blockieren Ihre Variablen zu deklarieren, zB:

pipeline { 
    environment { 
    FOO = "foo" 
    } 

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

Er hat die neue [deklarative Pipeline-Modell] mit (https://github.com/jenkinsci/pipeline-model-definition - plugin/wiki/getting% 20started) Syntax, deshalb ist es anders als das, was wir wissen ;-) – StephenKing

+1

Oops sorry habe das neue deklarative Pipeline Model nicht gesehen, ich habe meinen Beitrag entsprechend bearbeitet! – Pom12

3

Vereinbar mit @ Pom12, @abayer. Zur Vervollständigung der Antwort, die Sie Skriptblock

somethign hinzufügen müssen versuchen wie folgt aus:

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

Beachten Sie, dass in diesem Beispiel davon ausgegangen wird, dass bereits eine definierte Umgebungsvariable "ENVIRONMENT_NAME" für jenkins verfügbar ist. – Alberto

Verwandte Themen