TL; DR; Gitlab-CI에서 명령으로 실행할 수있는 단일 행 문자열로로드되는 다중 행 YAML 스칼라 (가독성을 위해)를 사용하려고합니다. 이렇게하려면 여러 줄에 걸쳐있는 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에서 접힌 스칼라를 사용합니다.
다중 선 일반 스칼라
Plain은 스칼라가 인용되지 않음을 의미하며, 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 오류를 발생시켜 일반 스칼라가 실패하면 유사한 접힌 스칼라는 실패 할 가능성이 높습니다.
\
당신의 줄에 추가 를 시도 할 수 있지만 그것이 작동하는지 여부는 말할 수 없습니다.