問題は(@Jordanが示されているように)Gitlab CIではサポートされていないmulti-line scriptsに関連すると思わや、あなたの「スクリプト」は、実際に単一のコマンドであるので、あなただけの1行であるためにそれを書き換える必要があります。
- echo -e "\n echo 'hi';\n echo 'bye';\n"
あなたのスカラーが引用されていない(つまり、それはecho
で始まる)ので、バックスラッシュまたは引用符のためにYAMLで特別なことをする必要はありません。
スクリプトの結果は、(4つのスペースをインデント行に、4つのスペースをインデント行に、印刷echo 'bye';
を印刷echo 'hi';
を空行を出力します。)
を使用すると、複数行を使用する場合と同じです読みやすくするために、入力を前処理することをお勧めします。 Pythonとruamel.yaml(免責:私は作者)を使用することをお勧めします。これにより、引用やコメントのような機能を保存することができます。
stages:
- 'mystage'
Build:
stage: mystage
# the following is rewritten
script:
- |
echo -e "
echo 'hi';
echo 'bye';
"
と次のPython(バージョン3)プログラム:このgitlab-ci.in.yml
を考える
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
を与える:flatten_multi_line()
せず
stages:
- 'mystage'
Build:
stage: mystage
# the following is rewritten
script:
- "echo -e \"\n echo 'hi';\n echo 'bye';\n\"\n"
(マルチ行の文字列はwとして保存されますell)。あなたはまた、新しく生成されたYAMLファイルの処理を引き起こす可能性のプログラムから
これは間違っていますが、おそらく 'Build'の後にコロンがありません。 'echo -e'と' echo 'hi''に同じ一重引用符を使い、そのうちの一つに二重引用符を使いたくないのですか? – Anthon
申し訳ありませんが、それらは両方とも私の例の間違いでした。私はそれらを修正しました。私が使用している実際のバージョンは、オンラインのYAML-JSONパーサーで動作しますが、GitLab CIでは失敗します。 – samanime
これには問題があります:https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/166あなたのコードは同等でなければならないので、問題が何であるかは分かりません)YAMLがそこで提案された解決法に至りました。あなたの行に '' \ ''を追加しようとするかもしれませんが、動作するかどうかは言えません。 –