次の場合、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
...これは完全に有効なシェル構文です。