sorun Gitlab CI (@Jordan belirtildiği gibi) ve "script" de destekleniyor değil multi-line scripts ile ilişkili olduğu görünmektedir yana
aslında tek bir komut, sadece tek bir satırda olmak için yeniden yazmak gerekir
- echo -e "\n echo 'hi';\n echo 'bye';\n"
Skaleriniz kote edilmediğinden (yani echo
ile başlar) YAML'de ters eğik çizgi veya tırnak işaretleri için özel bir şey yapmanıza gerek yoktur.
senaryonun sonucu (dört boşluk bir çizgi üzerinde, dört boşluk bir çizgi üzerinde, baskı echo 'bye';
baskı echo 'hi';
boş bir satır yazdırın.)
çoklu çizgi kullanmak istiyorsanız aynıdır Okunabilirlik için giriş, en iyi seçeneğiniz girişi önceden işlemektir. Python ve ruamel.yaml (disclaimer: ben yazarım) kullanmanızı öneririm, bu da bunu yaparken tırnak ve yorumlar gibi özellikleri korumanızı sağlar.
bu gitlab-ci.in.yml
Verilen:
stages:
- 'mystage'
Build:
stage: mystage
# the following is rewritten
script:
- |
echo -e "
echo 'hi';
echo 'bye';
"
ve aşağıdaki Python (sürüm 3) programı:
stages:
- 'mystage'
Build:
stage: mystage
# the following is rewritten
script:
- "echo -e \"\n echo 'hi';\n echo 'bye';\n\"\n"
(flatten_multi_line()
çoklu olmadan:
from pathlib import Path
import ruamel.yaml
def flatten_multi_line(d):
if isinstance(d, list):
for idx, elem in enumerate(d):
if isinstance(elem, (list, dict)):
flatten_multi_line(elem)
elif isinstance(elem, ruamel.yaml.scalarstring.PreservedScalarString):
d[idx] = ruamel.yaml.scalarstring.DoubleQuotedScalarString(elem)
elif isinstance(d, dict):
for key in d:
if isinstance(d[key], (list, dict)):
flatten_multi_line(d[key])
elif isinstance(d[key], ruamel.yaml.scalarstring.PreservedScalarString):
d[key] = ruamel.yaml.scalarstring.DoubleQuotedScalarString(elem)
in_file = Path('gitlab-ci.in.yml')
out_file = Path('gitlab-ci.yml')
with in_file.open() as fp:
data = ruamel.yaml.round_trip_load(fp, preserve_quotes=True)
flatten_multi_line(data)
with out_file.open('w') as fp:
ruamel.yaml.round_trip_dump(data, fp)
gitlab-ci.yml
aşağıdaki verir -line dize w olarak korunur Eli). Ayrıca yeni oluşturulan YAML dosyasının işlemesini tetikleyebilecek programından
Bu yanlış YAML, muhtemelen 'Build' sonra bir kolon özledim. 'Echo -e' ve 'echo' hi'' için aynı tek tırnakları kullanmak istediğinizden ve bunlardan biri için çift tırnak kullanmadığınızdan emin misiniz? – Anthon
Üzgünüz, bunlar benim örneğimin hatalarıydı. Onları düzelttim. Kullanmakta olduğum gerçek sürüm, çevrimiçi YAML-JSON ayrıştırıcılarında çalışır, ancak GitLab CI'de başarısız olur. – samanime
Bunun için bir sorun var: https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/166 Kodun * eşdeğer olması gerektiği için sorunun ne olduğu açık değil (yeterli) YAML orada önerilen çözümlere. Hatlarınıza ''\' 'eklemeye çalışabilir, ancak çalışıp çalışamayacağını söyleyemem. –