2016-10-11 15 views
10

Pipeline plugin in Jenkins 2.x'u kullanarak, sh adımından aşama veya düğüm düzeyinde bir yerde tanımlanmış bir Groovy değişkenine nasıl erişebilirim?Jenkins boruhattında Kabuk adımından bir Groovy değişkenine erişme

Basit bir örnek:

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 
    } 
} 

Jenkins çıkış sayfasında aşağıdaki verir: sh adımda

[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 

biri görebileceğiniz gibi, echo boş bir dize yazdırır.

Bir iş çevresinde

env.some_var = 'Hello World' 

yoluyla ortam kapsamında değişken tanımlamak ve Ancak

sh 'echo ${env.some_var}' 

, suiistimal bu tür bu görev için çevre kapsamı aracılığıyla yazdırmak olacaktır.

+1

Olası yinelenen [harika tek veya çift tırnak içinde dizeleri farkı nedir?] (Http://stackoverflow.com/questions/6761498/whats-the-difference-of-strings-within-single -ve-çift-tırnak-in-groovy) –

+1

Tam olarak bir kopya değil, ama doğru tırnak kullanmanın basit bir konu olduğunu düşünüyorum. Bağladığınız sayfada verilen örnekler çift tırnak kullanır: https://jenkins.io/doc/book/pipeline/overview/#basic-groovy-syntax-for-pipeline-configuration –

+0

Gerçekten de bunu işaretlediğiniz için teşekkür ederim. Daha dikkatli bakmalıyız ... çift tırnak kullanırken, enterpolasyon beklendiği gibi çalışır. İsterseniz bunu bir cevap olarak ekleyebilirsiniz. – Dirk

cevap

10

Değişken bir dizeyi kullanmak için değişkenlerin bir dizeye değiştirildiği yerlerde çift tırnak işareti kullanın.

sh "echo $some_var"