TL; DR; Bạn muốn sử dụng đại lượng vô hướng YAML nhiều dòng (để dễ đọc) được tải dưới dạng một chuỗi dòng đơn có thể được Gitlab-CI phát hành dưới dạng lệnh. Để làm như vậy, hãy sử dụng một đại lượng vô hướng đơn giản (không có dấu ngoặc kép) trong YAML được trải dài trên nhiều dòng:
script:
- echo -e
"echo 'hi';
echo 'bye';"
Xin lưu ý rằng có một số hạn chế do YAML áp đặt đối với các đại lượng vô hướng như vậy. Điều bạn chắc chắn cần biết là mỗi dòng sau được thụt vào ít nhất một vị trí nhiều hơn echo -e
(được thụt vào hai vị trí liên quan đến nút thu thập của nó, không được thụt vào chút nào) và mỗi dòng mới được thay thế bằng dấu cách khi được tải (vì vậy bạn cần phải quan tâm một chút đến vị trí đặt dòng mới).
Có nhiều quan niệm sai lầm trong bài đăng của bạn, dẫn đến việc bạn đặt câu hỏi sai.
Không có cái gọi là chuỗi YAML nhiều dòng . YAML có các đại lượng vô hướng và một số đại lượng vô hướng này có thể được chương trình tải dưới dạng chuỗi, trong khi một số chương trình khác sẽ được tải dưới dạng số nguyên, số float, v.v.
Rõ ràng là bạn quan tâm đến các nút vô hướng đang được tải dưới dạng một chuỗi, vì chuỗi đó sau đó có thể được hiểu như một dòng lệnh. Nhưng bạn không muốn có dòng lệnh nhiều dòng (tức là với các dòng mới được nhúng), vì các tập lệnh nhiều dòng không được hỗ trợ trong Gitlab CI (như @Jordan đã chỉ ra).
Để dễ đọc, bạn muốn sử dụng khả năng, tiêu chuẩn, của YAML để tải các đại lượng vô hướng nhiều dòng dưới dạng chuỗi đơn dòng.
Nếu bạn không quan tâm đến khả năng đọc, bạn có thể sử dụng:
- echo -e "\n echo 'hi';\n echo 'bye';\n"
và vì đại lượng vô hướng của bạn không được trích dẫn (tức là nó bắt đầu bằng echo
) nên bạn không cần thực hiện bất kỳ điều gì đặc biệt trong YAML đối với dấu gạch chéo ngược hoặc dấu ngoặc kép.
Kết quả của tập lệnh là như nhau (in một dòng trống, in echo 'hi';
trên một dòng thụt vào bốn khoảng trắng, in echo 'bye';
trên một dòng thụt vào bốn khoảng trắng.)
Nếu bạn muốn sử dụng đầu vào nhiều dòng để dễ đọc, được tải dưới dạng một dòng, về cơ bản có hai tùy chọn: sử dụng đại lượng mặt phẳng nhiều dòng hoặc sử dụng đại lượng vô hướng gấp trong YAML của bạn.
vô hướng đơn giản nhiều dòng
Đồng bằng có nghĩa là đại lượng vô hướng không được trích dẫn, và như với bất kỳ thứ nhiều dòng nào trong YAML đa dòng có nghĩa là các dòng sau cần được thụt lề một cách thích hợp, trong trường hợp này là xa hơn dòng ban đầu
script:
- echo -e
"echo 'hi';
echo 'bye';"
dòng mới được thay thế bằng dấu cách, vì vậy đừng làm như sau:
script:
- echo -e
"echo 'hi';
echo '
bye';"
vì bạn sẽ nhận được một không gian hiển thị trước đó bye
.
Có một số hạn chế như vậy là bạn không thể có dấu hai chấm theo sau là dấu cách trong một đại lượng vô hướng như vậy (sẽ làm cho nó giống như cặp khóa-giá trị).
Không cần thiết phải thoát khỏi dấu gạch chéo ngược trong vô hướng đơn giản, vì bạn không thể thoát bất kỳ ký tự nào trong một vô hướng đơn giản, nhưng tất nhiên bạn có thể bao gồm dấu gạch chéo ngược, sẽ kết thúc trong chuỗi được tải từ YAML và có thể có ý nghĩa đối với lệnh được thực thi từ chuỗi đó.
vô hướng gấp
Một đại lượng vô hướng gấp khúc tương tự như một đại lượng vô hướng thuần túy ở chỗ tất cả các dòng mới (đơn) được thay thế bằng một khoảng trắng trong khi tải:
script:
- >
echo -e
"echo 'hi';
echo 'bye';"
Bạn cần phải thụt lề thông tin lệnh thực tế ít nhất bằng chỉ báo vô hướng được gấp lại ( >
).
Trái ngược với vô hướng đơn giản, những thứ như :
không có ý nghĩa đặc biệt. Vì vậy, nếu các vô hướng đơn giản không thành công bằng cách tạo ra một lỗi YAML, các vô hướng gấp tương tự rất có thể sẽ không.
\
vào lời thoại của mình, nhưng tôi không thể nói liệu điều đó có hiệu quả hay không.