TL; DR; Desea utilizar un escalar YAML de varias líneas (para facilitar la lectura) que se carga como una cadena de una sola línea que se puede emitir como un comando por Gitlab-CI. Para hacerlo, use un escalar simple (sin comillas) en YAML que se extienda en varias líneas:
script:
- echo -e
"echo 'hi';
echo 'bye';"
Tenga en cuenta que YAML impone algunas restricciones a dichos escalares. Lo que ciertamente necesita saber es que cada línea siguiente tiene una sangría de al menos una posición más que echo -e
(que tiene dos posiciones con sangría en relación con su nodo de colección, que no tiene sangría en absoluto), y que cada nueva línea se reemplaza por un espacio cuando se carga (por lo que debe tener un poco de cuidado de dónde colocar las nuevas líneas).
Hay varios conceptos erróneos en tu publicación que te llevan a hacer la pregunta incorrecta.
No existe una cadena YAML de varias líneas . YAML tiene escalares y algunos de estos escalares se pueden cargar mediante un programa como cadenas, mientras que otros se cargarán como enteros, flotantes, etc.
Obviamente, está interesado en los nodos escalares que se cargan como una cadena, ya que esa cadena se puede interpretar como una línea de comandos. Pero no desea tener una línea de comandos de varias líneas (es decir, con nuevas líneas incrustadas), ya que los scripts de varias líneas no son compatibles con Gitlab CI (como indicó @Jordan).
Para facilitar la lectura, desea utilizar la capacidad estándar de YAML para cargar escalares de varias líneas como una cadena de una sola línea.
Si no le importa la legibilidad, puede usar:
- echo -e "\n echo 'hi';\n echo 'bye';\n"
y dado que su escalar no está citado (es decir, comienza con echo
), no necesita hacer nada especial en YAML para las barras invertidas o las comillas.
El resultado del guión es el mismo (imprima una línea vacía, imprima echo 'hi';
en una línea con sangría de cuatro espacios, imprima echo 'bye';
en una línea con sangría de cuatro espacios).
Si desea utilizar la entrada multilínea para facilitar la lectura, que se cargan como una sola línea, existen esencialmente dos opciones: utilizar un escalar plano multilínea o utilizar un escalar plegado en su YAML.
escalar simple multilínea
Sencillo significa que el escalar no está entre comillas y, como con cualquier cosa de varias líneas en YAML, las siguientes líneas deben tener una sangría adecuada, en este caso más allá de la línea inicial.
script:
- echo -e
"echo 'hi';
echo 'bye';"
las nuevas líneas se reemplazan por espacios, así que no lo hagas:
script:
- echo -e
"echo 'hi';
echo '
bye';"
ya que obtendrá un espacio visible antes bye
.
Existen algunas restricciones como que no puede tener dos puntos seguidos de un espacio dentro de dicho escalar (lo que lo haría parecer un par clave-valor).
No hay necesidad de escapar de las barras invertidas en escalares simples, ya que no puede escapar de ningún carácter en un escalar simple, pero por supuesto puede incluir una barra invertida, que terminará en la cadena cargada desde el YAML y puede tener significado para el comando ejecutado de esa cadena.
escalar doblado
Un escalar plegado es similar a un escalar simple en que todas las líneas nuevas (únicas) se sustituyen por un espacio durante la carga:
script:
- >
echo -e
"echo 'hi';
echo 'bye';"
Necesita sangrar la información real del comando al menos tanto como el indicador escalar plegado ( >
).
Al contrario de los escalares simples, cosas como :
no tienen un significado especial. Entonces, si los escalares simples fallan al lanzar un error YAML, lo más probable es que los escalares plegados similares no lo hagan.
\
a sus líneas, pero no puedo decir si funcionará o no.