TL; DR; Chcesz użyć wielowierszowego skalara YAML (dla czytelności), który jest ładowany jako ciąg pojedynczego wiersza, który może być wydany jako polecenie przez Gitlab-CI. Aby to zrobić, użyj zwykłego (bez cudzysłowów) skalara w YAML, który jest rozłożony na wiele linii:
script:
- echo -e
"echo 'hi';
echo 'bye';"
Należy pamiętać, że YAML nakłada pewne ograniczenia na takie skalary. Z pewnością musisz wiedzieć, że każda następna linia jest wcięta o co najmniej jedną pozycję więcej niż echo -e
(która jest wcięta o dwie pozycje względem jej węzła kolekcji, który nie jest w ogóle wcięty) i że każda nowa linia jest zastępowana spacją po załadowaniu (więc musisz trochę uważać, gdzie wstawiać znaki nowej linii).
W Twoim poście jest wiele nieporozumień, które powodują, że zadajesz niewłaściwe pytanie.
Nie ma czegoś takiego jak wieloliniowy ciąg YAML . YAML ma skalary i niektóre z nich mogą być ładowane przez program jako łańcuchy, podczas gdy inne zostaną załadowane jako liczby całkowite, zmiennoprzecinkowe itp.
Oczywiście jesteś zainteresowany węzłami skalarnymi, które są ładowane jako łańcuch, ponieważ ten ciąg może być następnie zinterpretowany jako wiersz poleceń. Ale nie chcesz mieć wielowierszowej linii poleceń (tj. Z osadzonymi znakami nowej linii), ponieważ skrypty wieloliniowe nie są obsługiwane w Gitlab CI (jak wskazał @Jordan).
Aby zwiększyć czytelność, chcesz użyć standardowej zdolności YAML do ładowania wieloliniowych skalarów jako ciągu jednowierszowego.
Jeśli nie dbałbyś o czytelność, możesz użyć:
- echo -e "\n echo 'hi';\n echo 'bye';\n"
a ponieważ twój skalar nie jest cytowany (tj. zaczyna się od echo
), nie musisz robić nic specjalnego w YAML dla odwrotnych ukośników lub cudzysłowów.
Wynik działania skryptu jest taki sam (wypisuje pusty wiersz, wypisuje echo 'hi';
wiersz z wcięciem czterech spacji, wypisuje echo 'bye';
wiersz wcięty czterema spacjami).
Jeśli chcesz użyć wieloliniowego wejścia dla czytelności, które są ładowane jako pojedynczy wiersz, istnieją zasadniczo dwie opcje: użyj wieloliniowego skalara płaskiego lub użyj zagiętego skalara w swoim YAML.
wieloliniowy zwykły skalar
Zwykły oznacza, że skalar nie jest cytowany i tak jak w przypadku każdej wieloliniowej rzeczy w YAML oznacza to, że kolejne wiersze muszą być odpowiednio wcięte, w tym przypadku dalej niż początkowa linia
script:
- echo -e
"echo 'hi';
echo 'bye';"
znaki nowej linii są zastępowane spacjami, więc nie rób tego:
script:
- echo -e
"echo 'hi';
echo '
bye';"
jak wcześniej dostaniesz widoczną przestrzeń bye
.
Istnieją pewne ograniczenia, takie jak dwukropek, po którym następuje spacja w takim skalarze (co sprawiłoby, że wyglądałby jak para klucz-wartość).
Nie ma potrzeby ucieczki od ukośników odwrotnych w zwykłych skalarach, ponieważ nie można uciec od żadnych znaków w zwykłym skalarze, ale oczywiście można dołączyć ukośnik odwrotny, który zakończy się w ciągu ładowanym z YAML i może mieć znaczenie dla wykonywanego polecenia z tego ciągu.
złożony skalar
Złożony skalar jest podobny do zwykłego skalara, ponieważ wszystkie (pojedyncze) znaki nowej linii są zastępowane spacją podczas ładowania:
script:
- >
echo -e
"echo 'hi';
echo 'bye';"
Musisz wciąć rzeczywiste informacje o poleceniu co najmniej tak samo, jak zagięty wskaźnik skalarny ( >
).
W przeciwieństwie do zwykłych skalarów, takie rzeczy :
nie mają specjalnego znaczenia. Więc jeśli zwykłe skalary zawiodą, rzucając błąd YAML, podobne zwinięte skalary najprawdopodobniej nie.
\
do swoich wierszy, ale nie mogę powiedzieć, czy to zadziała, czy nie.