TL; DR; Gitlab-CIによってコマンドとして発行できる単一行の文字列としてロードされる複数行のYAMLスカラー(読みやすさのため)を使用する必要があります。これを行うには、複数行に分散されたYAMLのプレーン(引用符なし)スカラーを使用します。
script:
- echo -e
"echo 'hi';
echo 'bye';"
このようなスカラーにはYAMLによって課せられるいくつかの制限があることに注意してください。確かに知っておく必要があるのは、後続の各行が少なくとも1つ多くインデントされていることecho -e
(コレクションノードに対して2つの位置がインデントされているが、まったくインデントされていない)、すべての改行がスペースに置き換えられていることです。ロードされたとき(したがって、改行を配置する場所に少し注意する必要があります)。
あなたの投稿には複数の誤解があり、間違った質問をすることになります。
複数行のYAML文字列のようなものはありません。YAMLにはスカラーがあり、これらのスカラーの一部はプログラムによって文字列としてロードできますが、その他のスカラーは整数、浮動小数点数などとしてロードされます。
文字列がコマンドラインとして解釈される可能性があるため、文字列としてロードされているスカラーノードに明らかに関心があります。ただし、Gitlab CIでは複数行のスクリプトがサポートされていないため(@Jordanが示すように)、複数行のコマンドライン(つまり、改行が埋め込まれている)は必要ありません。
読みやすくするために、YAMLの標準機能を使用して、複数行のスカラーを1行の文字列としてロードします。
読みやすさを気にしない場合は、次を使用できます。
- echo -e "\n echo 'hi';\n echo 'bye';\n"
また、スカラーは引用符で囲まれecho
ていないため(つまり、で始まる)、バックスラッシュや引用符に対してYAMLで特別なことを行う必要はありません。
スクリプトの結果は同じです(空の行を印刷echo 'hi';
し、4スペースインデントされた行に印刷echo 'bye';
し、4スペースインデントされた行に印刷します)。
読みやすくするために複数行の入力を使用する場合は、1行として読み込まれ、基本的に2つのオプションがあります。複数行の平面スカラーを使用するか、YAMLで折り返しスカラーを使用します。
複数行のプレーンスカラー
プレーンは、スカラーが引用符で囲まれていないことを意味し、YAMLの複数行のものと同様に、複数行は、次の行を適切にインデントする必要があることを意味します。この場合は、最初の行よりも遠くにあります。
script:
- echo -e
"echo 'hi';
echo 'bye';"
改行はスペースに置き換えられるため、次のことは行わないでください。
script:
- echo -e
"echo 'hi';
echo '
bye';"
の前に表示されるスペースが表示されるためですbye
。
このようなスカラー内でコロンの後にスペースを含めることはできないなど、いくつかの制限があります(これにより、キーと値のペアのように見えます)。
そこには、プレーンスカラで任意の文字をエスケープすることができないよう、無地のスカラーにバックスラッシュをエスケープする必要はありませんが、もちろん、あなたはバックスラッシュを含めることができ、YAMLからロードされた文字列になってしまいますし、そのことができ、実行コマンドの意味を持っていますその文字列から。
折りたたまれたスカラー
折りたたまれたスカラーは、すべての(単一の)改行がロード中にスペースに置き換えられるという点でプレーンスカラーに似ています。
script:
- >
echo -e
"echo 'hi';
echo 'bye';"
実際のコマンド情報は、少なくとも折りたたまれたスカラーインジケーター(>
)と同じだけインデントする必要があります。
単純なスカラーとは異なり、のような:
ものには特別な意味はありません。したがって、プレーンスカラーがYAMLエラーをスローして失敗した場合、同様の折りたたまれたスカラーは失敗しない可能性があります。
\
行に追加してみるかもしれませんが、それがうまくいくかどうかはわかりません。