2016-10-11 13 views
10

Sử dụng Pipeline plugin in Jenkins 2.x, làm cách nào tôi có thể truy cập biến Groovy được xác định ở cấp độ giai đoạn hoặc nút từ trong bước sh?Truy cập biến Groovy từ trong vòng trình bao trong đường dẫn Jenkins

đơn giản ví dụ:

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

đưa ra sau đây trên trang đầu ra Jenkins:

[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 

Như người ta có thể thấy, echo trong bước sh in một chuỗi rỗng.

Một công việc xung quanh sẽ được xác định biến trong phạm vi môi trường qua

env.some_var = 'Hello World' 

và in nó qua

sh 'echo ${env.some_var}' 

Tuy nhiên, loại lạm dụng phạm vi môi trường cho nhiệm vụ này.

+1

có thể trùng lặp của [sự khác biệt của chuỗi trong dấu ngoặc đơn hoặc kép trong groovy là gì?] (Http://stackoverflow.com/questions/6761498/whats-the-difference-of-strings-within-single -or-double-quotes-in-groovy) –

+1

Không chính xác là một bản sao, nhưng tôi nghĩ rằng đó là một vấn đề đơn giản của việc sử dụng các dấu ngoặc kép chính xác. Các ví dụ được đưa ra trong trang bạn đã liên kết sử dụng dấu ngoặc kép: https://jenkins.io/doc/book/pipeline/overview/#basic-groovy-syntax-for-pipeline-configuration –

+0

Thật vậy, cảm ơn bạn đã chỉ ra điều này. Nên có vẻ cẩn thận hơn ... khi sử dụng dấu ngoặc kép, nội suy hoạt động như mong đợi. Bạn có thể thêm câu trả lời này làm câu trả lời nếu muốn. – Dirk

Trả lời

10

Để sử dụng chuỗi templatable, trong đó các biến được thay thế thành chuỗi, hãy sử dụng dấu ngoặc kép.

sh "echo $some_var" 
Các vấn đề liên quan