2016-10-03 6 views
19

宣言的なJenkinsパイプラインスクリプトを作成しようとしていますが、単純な変数宣言に問題があります。私はジェンキンス2.7.4およびパイプライン2.4によJenkins:パイプラインステージで変数を定義できません

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

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

は、しかし、私はこのエラーを取得:

は、ここに私のスクリプトです。

答えて

30

Jenkins Piの宣言モデルpelinesは、ブロックsee the syntax guide for more infoにあるstageブロックで許される構文の制限されたサブセットを持っています。 script { ... }ブロックにステップをラップすることでその制限を回避できますが、その結果、scriptブロック内の構文、パラメータなどの検証は失われます。

15

エラーは指定された行からではなく、最初の3行から来ていると思います。代わりにこれを試してみてください:

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

私はあなたが有効でないいくつかの余分なラインを持っていたと思います...

EDIT

declaractive pipeline model documentationから、あなたがenvironment宣言を使用する必要があることと思われますブロックを宣言して変数を宣言します。例:

pipeline { 
    environment { 
    FOO = "foo" 
    } 

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

:あなたはスクリプトブロック

を追加する必要が答えを完了するには、このようsomethign試してみてください-plugin/wiki/getting%20started)の構文で、私たちが知っているものとは違うのです;-) – StephenKing

+1

残念ながら、その新しい宣言的パイプラインモデルは見当たりませんでした。 – Pom12

3

@ Pom12、@abayerと同意します。彼は新しい[宣言型パイプラインモデル](https://github.com/jenkinsci/pipeline-model-definitionを使用しています

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

この例では、jenkinsにアクセス可能な定義済みの環境変数 "ENVIRONMENT_NAME"がすでに存在することを前提としています。 – Alberto

関連する問題