travis.yml で条件付きでスクリプトを実行できません。なぜですか? 質問する

travis.yml で条件付きでスクリプトを実行できません。なぜですか? 質問する

次の場合、travis はまったくビルドされません。ファイルを検証しようとするとtravis.yml、if ステートメントのすぐ上の行の列-3 に文字が欠けているというエラーが表示されますが、エラーは下の if ステートメントに関係しています。

if ステートメントをスクリプトに移動する必要がありますか?

# Deploy
after_success:
  - ./tools/docker-push-container.sh
  - if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
      ./.travis/success_message.sh
    fi

ベストアンサー1

YAML 構文についていくつかの仮定を立てているため、問題が発生しています。次のように、後続の行をインデントして YAML の行を「拡張」すると、

- The quick brown fox
  jumped over the
  lazy dog.

まさにあなたが代わりにこう書いたのと同じです:

- The quick brown fox jumped over the lazy dog.

これは、次のように記述したシェル フラグメントを意味します。

  - if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
      ./.travis/success_message.sh
    fi

実際は次のようになります:

if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh fi

そして、その行をシェルで実行しようとすると、次のようになります。

sh: -c: line 1: syntax error: unexpected end of file

YAML ドキュメントに複数行のシェル スクリプトを含める場合は、|次のように逐語的ブロック演算子 を使用するのが最善策でしょう。

  - |
    if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
      ./.travis/success_message.sh
    fi

その結果、意図したとおり、次のようになります。

if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
  ./.travis/success_message.sh
fi

あるいは、セミコロンを適切に使用することもできます。

  - if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
      ./.travis/success_message.sh;
    fi

;終端の前のnew に注意してくださいfi。結果は次のようになります。

if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh; fi

...これは完全に有効なシェル構文です。

おすすめ記事