1. ホーム
  2. yaml

[解決済み] GitLab CI用のマルチラインYAML文字列(.gitlab-ci.yml)

2022-10-23 15:15:40

質問

を書こうとしているのですが gitlab-ci.yml ファイルを書こうとしています。しかし、それがパースされないようなのです。私は、両方試しましたが - |- > であり、結果は同じです。

stages:
  - mystage

Build:
  stage: mystage
  script:
    - |
        echo -e "
            echo 'hi';
            echo 'bye';
        "

実行しようとすると、以下のように表示されるだけです。 echo -e ' を実行するスクリプトとして表示するだけで、複数行の文字列全体は表示されません。これは私にとって問題の原因となります。

このようなことを書くには、どのような構文が正しいのでしょうか?

どのように解決するのですか?

TL;DR; 複数行のYAMLスカラー(可読性のため)を、Gitlab-CIからコマンドとして発行できる1行の文字列としてロードして使いたい場合。そのためには、複数行に渡るプレーンな(引用符なしの)スカラーをYAMLで使用します。

script:
- echo -e 
   "echo 'hi';
    echo 'bye';"

このようなスカラーにはYAMLによって課されたいくつかの制限があることに注意してください。確かに知っておく必要があるのは、次の各行が echo -e (これはコレクションノードに対して2つインデントされており、全くインデントされていません)、そしてすべての改行はロードされるときにスペースに置き換えられるということです(したがって、改行をどこに置くかについて少し注意を払う必要があります)。


あなたの投稿には複数の誤解があり、それが間違った質問をすることにつながっています。

複数行の YAML 文字列というものは存在しません。 . YAML はスカラーを持ち、これらのスカラーのいくつかはプログラムによって文字列として読み込まれ、他のいくつかは整数や浮動小数点数などとして読み込まれることになります。

文字列として読み込まれるスカラーノードに興味があるのは明らかです。なぜなら、その文字列はコマンドラインとして解釈されるからです。しかし、複数行のコマンドライン (すなわち改行が埋め込まれているもの) を持ちたくはないでしょう、なぜなら 複数行のスクリプト はGitlab CIではサポートされていません(@Jordanが指摘したとおり)。

可読性を高めるために、複数行のスカラーを一行の文字列として読み込むYAMLの標準的な機能を使用することをお勧めします。

可読性にこだわらないのであれば。

- echo -e "\n    echo 'hi';\n    echo 'bye';\n"

で始まり、スカラーが引用されていない(つまり echo で始まる) ので、バックスラッシュや引用符のために YAML で何か特別なことをする必要はありません。

スクリプトの結果は同じです (空行を表示、print echo 'hi'; を表示し、スペース4つ分インデントした行に echo 'bye'; を印字します(スペース4つ分インデントしています)。

読みやすくするために複数行の入力を1行として読み込みたい場合、基本的に2つの選択肢があります。複数行の平面スカラーを使うか、YAMLで折りたたまれたスカラーを使うかです。

複数行平面スカラー

プレーンとはスカラーが引用符で囲まれていないことを意味し、YAML の複数行のものと同様に、複数行とは次の行が適切にインデントされる必要があることを意味します、この場合、最初の行よりもさらにインデントされます。

script:
- echo -e 
   "echo 'hi';
    echo 'bye';"

改行はスペースに置き換えられるので、しないでください。

script:
- echo -e 
   "echo 'hi';
    echo '
   bye';"

の前に可視スペースが入るので bye .

このようなスカラーには、コロンの後にスペースを入れてはいけないなどの制約があります(キーと値のペアのように見えてしまいます)。

プレーンスカラではいかなる文字もエスケープできないので、バックスラッシュをエスケープする必要はない。しかし、もちろんバックスラッシュを含めることはでき、それはYAMLから読み込まれた文字列の中で終わってしまい ができます。 はその文字列から実行されるコマンドに対して意味を持ちます。

折り畳みスカラー

foldedスカラーは、読み込み時にすべての(単一の)改行がスペースに置き換えられるという点で、プレーンスカラ-と似ている。

script:
- >
  echo -e 
  "echo 'hi';
  echo 'bye';"

実際のコマンド情報は、少なくとも折り畳まれたスカラー表示と同じだけインデントする必要があります ( > ).

のようなプレーンなスカラーとは異なり : は特別な意味を持たない。そのため、もしプレーンなスカラーがYAMLエラーを投げて失敗しても、似たような折りたたみスカラーは失敗しない可能性が高いです。