web-dev-qa-db-ja.com

YAMLで 'script:'の複数行コマンドを使用する方法は?

Travis CIを使用するリポジトリがあり、.travis.ymlに次の行があります。

script:
- vim -Nu <(cat <<-EOF
  set nocompatible |
  filetype off
  EOF
  ) -c 'Script' > /dev/null

悲しいことに、これは機能しません。これは1行に変換され、次のように実行されるためです。

vim -Nu <(cat <<-EOF set no compatible | filetype off | EOF ) -c 'Script' > /dev/null

EOFは1行である必要があるため、これによりEOFタグが機能しなくなります。別の方法は、次のような通常の引用符を使用することです。

script:
- vim -Nu <(cat 'set nocompatible |
  filetype off
  ) -c 'Script' > /dev/null

これは機能し、問題ありませんが、.travis.ymlに改行を挿入する方法が必要だと感じています。私は現在、代替手段を持っていますが、将来はそうでないかもしれません。それでどうやってやるの?

28
hgiesel

YAMLでは、""を使用して改行を引用してエスケープすることでスカラーで改行を指定できます(\n)。または、 リテラルスタイルブロックスカラー

script:
- |
  vim -Nu <(cat <<-EOF
  set nocompatible |
  filetype off
  EOF
  ) -c 'Script' > /dev/null

これは、|(パイプ記号)の行で始まり、その後に改行が保持される複数の行が続くスカラーです。

  • 行は通常インデントされます(例外:単一の最上位リテラルスタイルブロックスカラー)。
  • |の後に修飾子があります:1-9、最初の行がスペースで始まるときに使用されます。 +-は、最終的な改行の削除に影響を与えます(通常は1つにまとめられます)。
34
Anthon

私はそのような形式を使用して、目的の効果を正確に達成します

script:
    - >
      valgrind
      --read-var-info=yes
      --error-exitcode=1
      --fullpath-after=
      --track-origins=yes
      --leak-check=full
      --num-callers=20
      --suppressions=$(pwd)/tests/zephir_parser.3.7.0.sup
      $(phpenv which php)
          -d variables_order=EGPCS
          run-tests.php
              -p $(which php)
              -d extension=$(pwd)/modules/zephir_parser.so
              -d variables_order=EGPCS
              -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP"
              --offline
              --show-diff
              --set-timeout 120
16
serghei