Multiline-YAML-string für GitLab CI (.gitlab-ci.yml)
Ich versuche zu schreiben gitlab-ci.yml
- Datei, die verwendet eine multi-line string für den Befehl. Jedoch, wie es scheint, es wird nicht geparsed. Ich habe versucht, sowohl die - |
und - >
mit identischen Ergebnissen.
stages:
- mystage
Build:
stage: mystage
script:
- |
echo -e "
echo 'hi';
echo 'bye';
"
Wenn er versucht zu laufen, es zeigt nur echo -e '
als das Skript ausgeführt wird, und nicht die ganze mehrzeiligen string. Dies verursacht Probleme für mich.
Was wäre die richtige syntax zu schreiben so etwas?
Dies ist falsch, YAML, du wohl übersehen einen Doppelpunkt nach
Sorry, das waren nur Fehler von meinem Beispiel. Ich habe korrigiert Sie. Die echte version, die ich verwende, funktioniert im online-YAML-JSON-Parser, aber nicht auf GitLab CI.
Es gibt ein Problem: gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/166 Es ist mir nicht klar, was das problem ist, da Ihr code sollte entspricht (genug) YAML zu den vorgeschlagenen Lösungen gibt. Sie könnten versuchen, anfügen
Build
. Sind Sie sicher, dass Sie wollen, verwenden Sie die gleichen Anführungszeichen für echo -e
und echo 'hi'
, und nicht doppelte Anführungszeichen verwenden, für einen solchen?Sorry, das waren nur Fehler von meinem Beispiel. Ich habe korrigiert Sie. Die echte version, die ich verwende, funktioniert im online-YAML-JSON-Parser, aber nicht auf GitLab CI.
Es gibt ein Problem: gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/166 Es ist mir nicht klar, was das problem ist, da Ihr code sollte entspricht (genug) YAML zu den vorgeschlagenen Lösungen gibt. Sie könnten versuchen, anfügen
\
zu deinen Zeilen, aber ich kann nicht sagen, ob das funktioniert oder nicht.InformationsquelleAutor samanime | 2017-03-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da scheint das problem zu sein, in Bezug auf multi-line-Skripten nicht unterstützt wird in Gitlab CI (wie @Jordan angegeben), und dein "Skript" ist eigentlich ein einziger Befehl, Sie sollte nur umschreiben, dass es auf einer Linie:
da deine Skalare nicht zitiert (d.h. es beginnt mit
echo
) brauchen Sie nicht, etwas besonderes zu tun in YAML für die backslashes oder Anführungszeichen.Das Ergebnis des Skripts ist der gleiche (print eine leere Zeile, drucken
echo 'hi';
auf eine Zeile mit vier Leerzeichen eingerückt, druckenecho 'bye';
auf eine Zeile mit vier Leerzeichen eingerückt.)Wenn Sie wollen, können Sie die multi-line-Eingang für die Lesbarkeit, Ihre beste option ist die pre-Prozess der Eingabe. Ich empfehle die Verwendung von Python und ruamel.yaml (disclaimer: ich bin der Autor), die Sie erhalten Funktionen, wie Sie Zitate und Kommentare, während Sie dies tun.
Angesichts dieser
gitlab-ci.in.yml
:und das folgende Python (version 3) Programm:
gibt die folgende
gitlab-ci.yml
:(ohne
flatten_multi_line()
multi-line string bewahrt bleibt).Aus dem Programm könnten Sie auch auslösen, die Verarbeitung der neu erstellte YAML-Datei (z.B. mit
subprocess.check_output()
, stellen Sie sicher, dass castout_file
mitstr()
wenn Sie wollen, dass es als argument zucheck_output()
)Das kann ich verstehen. Wäre es akzeptabel, Vorverarbeiten Ihrer lesbaren YAML-Datei, bevor es verarbeitet wird von GitLab CI?
Ich hab mir überlegt, dass. Es ist ein extra-Schritt und ein bisschen zusätzliche Komplexität, aber kann es Wert sein.
Ich habe eine mögliche Lösung.
InformationsquelleAutor Anthon
Kam ich hier präventiv erwartet, würde dies ein Problem sein, aber die folgenden "multi-line" - Kommando für die Lesbarkeit ist für mich arbeiten:
Gitlab Läufer: Shell Runner version 1.11.0
/Gitlab-version: 8.17.2
InformationsquelleAutor PotatoFarmer
Können Sie beliebige mehrzeilige Skripte/Befehle, die über yaml literal_block und Anker-Funktion. Beispiel:
InformationsquelleAutor Benny K