TL; DR; Sie möchten einen mehrzeiligen YAML-Skalar (zur besseren Lesbarkeit) verwenden, der als einzeilige Zeichenfolge geladen wird, die von Gitlab-CI als Befehl ausgegeben werden kann. Verwenden Sie dazu in YAML einen einfachen Skalar (ohne Anführungszeichen), der über mehrere Zeilen verteilt ist:
script:
- echo -e
"echo 'hi';
echo 'bye';"
Bitte beachten Sie, dass YAML solchen Skalaren einige Einschränkungen auferlegt. Was Sie sicherlich wissen müssen, ist, dass jede folgende Zeile mindestens eine Position mehr echo -e
eingerückt ist als (die zwei Positionen relativ zu ihrem Sammlungsknoten eingerückt ist, der überhaupt nicht eingerückt ist) und dass jede neue Zeile durch ein Leerzeichen ersetzt wird wenn geladen (also müssen Sie ein wenig darauf achten, wo Sie Zeilenumbrüche platzieren).
Es gibt mehrere Missverständnisse in Ihrem Beitrag, die dazu führen, dass Sie die falsche Frage stellen.
Es gibt keine mehrzeilige YAML-Zeichenfolge . YAML verfügt über Skalare, und einige dieser Skalare können von einem Programm als Zeichenfolgen geladen werden, während andere als Ganzzahlen, Gleitkommazahlen usw. geladen werden.
Sie sind offensichtlich an Skalarknoten interessiert, die als Zeichenfolge geladen werden, da diese Zeichenfolge dann als Befehlszeile interpretiert werden kann. Sie möchten jedoch keine mehrzeilige Befehlszeile (dh mit eingebetteten Zeilenumbrüchen) haben, da mehrzeilige Skripte in Gitlab CI nicht unterstützt werden (wie von @Jordan angegeben).
Zur besseren Lesbarkeit möchten Sie die Standardfunktion von YAML verwenden, um mehrzeilige Skalare als einzeilige Zeichenfolge zu laden.
Wenn Sie sich nicht für die Lesbarkeit interessieren, können Sie Folgendes verwenden:
- echo -e "\n echo 'hi';\n echo 'bye';\n"
und da Ihr Skalar nicht in Anführungszeichen steht (dh mit beginnt echo
), müssen Sie in YAML nichts Besonderes für die Backslashes oder Anführungszeichen tun.
Das Ergebnis des Skripts ist dasselbe (leere Zeile drucken, echo 'hi';
in einer Zeile mit vier Leerzeichen einrücken , in einer Zeile mit vier Leerzeichen drucken echo 'bye';
).
Wenn Sie den mehrzeiligen Eingang zur besseren Lesbarkeit verwenden möchten, der als einzelne Zeile geladen wird, gibt es im Wesentlichen zwei Optionen: Verwenden Sie einen mehrzeiligen Ebenenskalar oder einen gefalteten Skalar in Ihrer YAML.
mehrzeiliger einfacher Skalar
Einfach bedeutet, dass der Skalar nicht in Anführungszeichen steht, und wie bei allen mehrzeiligen Elementen in YAML bedeutet mehrzeilig, dass folgende Zeilen entsprechend eingerückt werden müssen, in diesem Fall weiter als die ursprüngliche Zeile
script:
- echo -e
"echo 'hi';
echo 'bye';"
Zeilenumbrüche werden durch Leerzeichen ersetzt. Tun Sie also nichts:
script:
- echo -e
"echo 'hi';
echo '
bye';"
wie Sie einen sichtbaren Raum vor bekommen bye
.
Es gibt einige Einschränkungen, dass Sie keinen Doppelpunkt gefolgt von einem Leerzeichen innerhalb eines solchen Skalars haben können (wodurch es wie ein Schlüssel-Wert-Paar aussehen würde).
Es besteht keine Notwendigkeit Schrägstriche im Klar Skalare zu entkommen, da Sie keine Zeichen in einem einfachen skalaren entweichen können, aber natürlich können Sie einen umgekehrten Schrägstrich enthalten, die in der Zeichenfolge aus dem YAML geladen werden am Ende und kann haben für den Befehl Bedeutung ausgeführt von dieser Zeichenfolge.
gefalteter Skalar
Ein gefalteter Skalar ähnelt einem einfachen Skalar dahingehend, dass alle (einzelnen) Zeilenumbrüche beim Laden durch ein Leerzeichen ersetzt werden:
script:
- >
echo -e
"echo 'hi';
echo 'bye';"
Sie müssen die tatsächlichen Befehlsinformationen mindestens so stark einrücken wie die gefaltete Skalaranzeige ( >
).
Im Gegensatz zu einfachen Skalaren haben Dinge wie :
keine besondere Bedeutung. Wenn also einfache Skalare durch Auslösen eines YAML-Fehlers fehlschlagen, werden ähnliche gefaltete Skalare dies höchstwahrscheinlich nicht tun.
\
an Ihre Zeilen anzuhängen , aber ich kann nicht sagen, ob das funktioniert oder nicht.