28

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

しかし、次のJenkinsfile

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

次の出力が得られます。

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

望ましい出力は次のようなものです。

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

iの値をシェルスクリプトに渡す方法はありますか?

編集:マットの答えに基づいて、私は今この解決策を使用しています:

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

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

4

3 に答える 3

33

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

1 つ目は、 を次のように変更する'こと"です。

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

さらに、変数が上記のように文字列に直接追加されている場合 ( $ion i=)、中かっこで閉じる必要があります。

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

それはあなたが望む行動を得るでしょう。

于 2017-01-09T14:26:15.663 に答える