sh
Jenkinsパイプラインの一部としてコマンドを設定しようとしています。コマンドには、値のリストが提供されるパラメーターがあります。この値にはスペースがあります。
私は成功しなかった多くのもの、配列、脱出などを試しました。
例は次のとおりです。
# In Jenkins task I configure env variable:
VALUE_LIST=("Value One" "Value Two" "Value Three")
# In pipeline:
...
sh "command --param ${env.VALUE_LIST[@]}"
...
これは私がこれを行うために努力した方法の1つにすぎないことを理解してください。
次の結果コマンドが必要です。
command --param "Value One" "Value Two" "Value Three"
私が達成できる最善は
command --param Value One Value Two Value Three
これは明らかに動作しません
答え1
これはうまくいきます。
printf "%s\0" "${VALUE_LIST[@]}" | xargs -0 sh -c 'command --param "$@"' command_name
値を印刷xargs
し、区切り文字として null を使用します。次に、値を引数としてコマンドをxargs
呼び出してsh
実行しますsh
。最後の部分は、command_name
ユーザーが指定した名前でコマンドを表します。これはこの構成では必須です。それ以外の場合、コマンドはリストの最初の値を受け取りません"$@"
。