2017-04-12 286 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"""