2017-04-12 107 views
4

缺少明顯的東西。 如何將groovy腳本中的變量傳遞給shell命令?這是在Jenkins文件的上下文中,如果它對語法很重要。groovy腳本 - sh變量

def COLOR 

node('nodename'){ 

    stage ('color') { 

     COLOR = "green" 
     echo "color is $COLOR" 

     sh '''COLOR=${COLOR} 
     echo $COLOR''' 

    } 
} 

我希望看到的外殼位打印​​,但我發現了以下內容:

[Pipeline] echo 
color is green 
[Pipeline] sh 
[job] Running shell script 
+ COLOR= 
+ echo 

我必須使用,因爲這是打算去那裏,一旦我得到這個理順含量對sh三重引用。

回答

8

你必須,而不是單用雙引號,以替換字符串表達式:

def COLOR 

node('nodename'){ 

    stage ('color') { 

     COLOR = "green" 
     echo "color is $COLOR" 

     sh """COLOR=${COLOR} 
     echo $COLOR""" 

    } 
} 

如果單引號需要使用某種原因,嘗試使用+串聯:

sh '''COLOR=''' + COLOR + ''' 
    echo ''' + COLOR 
+0

哎呀,看來你是對的,但拋出過什麼,我打算把在(報價問題 - 試圖將一個變量中JQ/JSON)。我認爲沒有其他解決方法使用單引號? – Alex

+0

使用多行字符串(使用三重引用)我懷疑你可以解決很多問題。但我並不完全明白你的意思是「試圖將jq/json放入變量中」。以下在Groovy中的作品:'def s =「」「root { key:」val「 }」「」' – manouti

+0

這是這個問題的後續處理http://stackoverflow.com/questions/43373176/store-json-直接在bash腳本與變量試圖將該解決方案融入groovy/shell組合。可能在此問題的範圍之外解決 – Alex

0

如果此處的代碼旨在將Groovy變量值(「綠色」)分配給環境變量COLOR,並且echo $COLOR旨在打印出shell變量,則需要將$轉義爲使shell可以讀取它,就像這樣:

sh """COLOR=${COLOR} 
echo \$COLOR"""