2017-01-08 10 views
6

私のJenkinsfileスクリプトの中で使用している変数を使用し、その値をシェルスクリプトの実行に(環境変数またはコマンドラインパラメータとして)渡します。Jenkinsfileからシェルコマンドに変数を渡す方法

しかし、次のJenkinsfile

for (i in [ 'a', 'b', 'c' ]) { 
    echo i 
    sh 'echo "from shell i=$i"' 
} 

は、出力を提供します:

a 
from shell i=a 
b 
from shell i=b 
c 
from shell i=c 

iの値を渡す方法任意のアイデア:

a 
from shell i= 
b 
from shell i= 
c 
from shell i= 

所望の出力は次のようなものですシェルのscipt?

編集:Matt's答えに基づいて、私は今、このソリューションを使用します。

for (i in [ 'a', 'b', 'c' ]) { 
    echo i 
    sh "i=${i}; " + 'echo "from shell i=$i"' 
} 

利点は、私はシェルスクリプトで"をエスケープする必要がないこと、です。

答えて

8

あなたのコードは文字列リテラルを使用しているので、あなたのジェンキンス変数はシェルコマンド内で補間されることはありません。 sh内の文字列内に変数を補間するには、"を使用する必要があります。 'はリテラル文字列を渡すだけです。だからここでいくつかの変更を加える必要があります。

最初は"'を変更することです:

for (i in [ 'a', 'b', 'c' ]) { 
    echo i 
    sh "echo "from shell i=$i"" 
} 

しかし、今、私たちは内側に"をエスケープする必要があります。また

for (i in [ 'a', 'b', 'c' ]) { 
    echo i 
    sh "echo \"from shell i=$i\"" 
} 

、変数に直接追加されている場合上記のような文字列($ii=)には、中括弧で囲む必要があります。

for (i in [ 'a', 'b', 'c' ]) { 
    echo i 
    sh "echo \"from shell i=${i}\"" 
} 

これは、あなたが望む動作を得るでしょう。

2

はこれを試してみてください。

for (i in [ 'a', 'b', 'c' ]) { 
    echo i 
    sh ''' 
    echo "from shell i=$i" 
    ''' 
} 
+0

sh """ echo ${paramName} """ 

代わりに使用するために私がチェックするだけでなく、 – chenchuk

+2

この$ {I}のようなVARを囲むようにしてみてくださいカント両方とも動作しません。 groovyの構文を調べると、 '' 'と' '' ''の違いは、単一行対複数行の文字列だけです。 – Joe

+0

私は 'sh '" "'がうまくいくと思っています。つまり、三重引用符の代わりに三重二重引用符 –

3

Mattsの答えへの拡張: 複数行のshスクリプトが

sh '''...''' 
関連する問題