2016-10-11 11 views
10

Pipeline plugin in Jenkins 2.xを使用して、shステップ内からステージまたはノードレベルのどこかで定義されたGroovy変数にアクセスするにはどうすればよいですか?JohkinsパイプラインのシェルステップからGroovy変数にアクセス

簡単な例:

node { 
    stage('Test Stage') { 
     some_var = 'Hello World' // this is Groovy 
     echo some_var // printing via Groovy works 
     sh 'echo $some_var' // printing in shell does not work 
    } 
} 

はジェンキンス出力ページに以下が得られる:shステップにおいて

[Pipeline] { 
[Pipeline] stage 
[Pipeline] { (Test Stage) 
[Pipeline] echo 
Hello World 
[Pipeline] sh 
[test] Running shell script 
+ echo 

[Pipeline] } 
[Pipeline] // stage 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

一方が見ることができるように、echo空の文字列を印刷します。

回避策

env.some_var = 'Hello World' 

を通じて環境スコープ内の変数を定義し、しかし

sh 'echo ${env.some_var}' 

、人権侵害のこの種のこのタスクのための環境の範囲を経由してそれを印刷することです。

+1

[グルーヴィーで、単一または二重引用符内の文字列の違いは何ですか?](http://stackoverflow.com/questions/6761498/whats-the-difference-of-strings-within-singleの可能性のある重複-or-double-quotes-in-groovy) –

+1

正確に重複しているわけではありませんが、正しい引用符を使用するのは簡単なことです。あなたがリンクしたページの例は二重引用符を使用しています:https://jenkins.io/doc/book/pipeline/overview/#basic-groovy-syntax-for-pipeline-configuration –

+0

本当に、これを指摘してくれてありがとう。もっと注意深く見ていたはずです...二重引用符を使用すると、補間は期待通りに機能します。これを答えとして追加することもできます。 – Dirk

答えて

10

変数が文字列に代入されるテンプレート可能な文字列を使用するには、二重引用符を使用します。

sh "echo $some_var" 
関連する問題