TL; DR; Вы хотите использовать многострочный скаляр YAML (для удобства чтения), который загружается как однострочная строка, которую Gitlab-CI может выдать как команду. Для этого используйте простой (без кавычек) скаляр в YAML, который распределен по нескольким строкам:
script:
- echo -e
"echo 'hi';
echo 'bye';"
Имейте в виду, что YAML налагает некоторые ограничения на такие скаляры. Что вам определенно нужно знать, так это то, что каждая следующая строка имеет отступ, по крайней мере, на одну позицию больше, чем echo -e
(который имеет отступ на две позиции относительно своего узла коллекции, который вообще не имеет отступа), и что каждая новая строка заменяется пробелом при загрузке (поэтому вам нужно немного позаботиться о том, где разместить новые строки).
В вашем сообщении есть несколько заблуждений, из-за которых вы задаете неправильный вопрос.
Многострочной строки YAML не существует. . В YAML есть скаляры, и некоторые из этих скаляров могут быть загружены программой как строки, а некоторые другие будут загружены как целые числа, числа с плавающей запятой и т. Д.
Вы, очевидно, заинтересованы в скалярных узлах, которые загружаются в виде строки, поскольку эту строку можно затем интерпретировать как командную строку. Но вы не хотите иметь многострочную командную строку (т.е. со встроенными символами новой строки), поскольку многострочные сценарии не поддерживаются в Gitlab CI (как указано в @Jordan).
Для удобства чтения вы хотите использовать стандартную возможность YAML для загрузки многострочных скаляров в виде однострочной строки.
Если вас не волнует удобочитаемость, вы можете использовать:
- echo -e "\n echo 'hi';\n echo 'bye';\n"
и поскольку ваш скаляр не цитируется (т.е. начинается с echo
), вам не нужно делать ничего особенного в YAML для обратной косой черты или кавычек.
Результат скрипта тот же (вывести пустую строку, вывести echo 'hi';
строку с отступом в четыре пробела, напечатать echo 'bye';
строку с отступом в четыре пробела).
Если вы хотите использовать многострочный ввод для удобочитаемости, который загружается как одна строка, по существу есть два варианта: использовать многострочный скаляр плоскости или использовать скаляр со складками в вашем 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, подобные скаляры со свернутой структурой, скорее всего, этого не сделают.
\
к своим строкам, но я не могу сказать, сработает это или нет.