2017-05-26 4 views
0

シェルスクリプト部分で変数にアクセスできないGroovyスクリプトの問題に直面しています。Jenkinsfileのシェル部分にGroovyパラメータが表示されない

スクリプト-1:

def a=20; 
println ("a is: $a"); 

出力-1:

a is: 20 

スクリプト-2:

def a=20; 
println ("a is: $a"); 
sh '''echo a is $a'''; 

出力-2:

グルービー。 lang.MissingMethodException:メソッドのシグネチャがありません。引数型にScript1.sh()が適用されます。(java.lang.String)values:[echo a is $ a] 可能な解決策:use([Ljava.lang.Object;])

どのようにすることができます、Script1.runで(groovy.lang.Closure) (3 Script1.groovy)で、()、実行()、任意の()を実行し、(java.lang.Object)メソッドであります私はシェル部分に$a = 20を得ますsh。言い換えれば、シェルスクリプト部分で変数$ aを渡すためにはどのような操作が必要ですか。

私はこのスクリプトをJenkinsパイプラインの文脈で書いています。ここでは、シェル部分にGroovy変数が見えないという問題に直面しています。

答えて

1

これは動作します:あなたは、シェルステートメントの二重引用符を使用して、単一引用符トリプルべきではありません

pipeline { 
    agent any 
    stages { 
     stage('Example') { 
      steps { 
       script { 
        // a is accessible globally in the Jenkinsfile 
        a = 20 
        // b is only accessible inside this script block 
        def b = 22 
        sh "echo a is $a" 
        sh "echo b is $b" 
       } 
      } 
     } 
    } 
    post { 
     always { 
      sh "echo a is $a" 
     } 
    } 
} 

+0

ありがとう、私は事を2つ学んだが、その2点目については確かですか?一般的なGroovyスクリプトでは、これは(OPで示されるように)そうではありませんが、Jenkins Pipelineスクリプト内では違うのですか? (私は彼らが...特別だと理解しています)。それとも、中括弧を使用すべきですか? (私が理解している) – qlown

+0

あなたは正しいです、第二の点は真ではありません。私の答えを調整しました。 – haschibaschi

+0

@haschibaschi、Plsはこのリンクを参照していますhttps://groovyconsole.appspot.com/script/5088905221111808まだ同じ問題が発生します – Yash

関連する問題