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
の値をShell sciptに渡す方法はありますか?
Edit:Matt's answerに基づいて、このソリューションを使用します:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "i=${i}; " + 'echo "from Shell i=$i"'
}
利点は、シェルスクリプトで"
をエスケープする必要がないことです。
コードはリテラル文字列を使用しているため、Jenkins変数はShellコマンド内で補間されません。 "
を使用して、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\""
}
さらに、上記のように変数を文字列に直接追加する場合($i
からi=
)、中かっこで閉じる必要があります。
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh "echo \"from Shell i=${i}\""
}
それはあなたが望む行動を取得します。
Mattsの回答の拡張:複数行のshスクリプトの使用
sh """
echo ${paramName}
"""
の代わりに
sh '''...'''
これを試して:
for (i in [ 'a', 'b', 'c' ]) {
echo i
sh '''
echo "from Shell i=$i"
'''
}