Ответ 1
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, схожие скалярные скаляры, скорее всего, не сработают.