次の場合、トラビスはまったく構築されません。 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
問題を引き起こしている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
ターミナルfi
の前の新しい;
に注意してください。これは結果として:
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh; fi
...これは完全に有効なシェル構文です。
larsksで上記の解決策を試しましたが、それは私にとっては機能せず、bash
で&&
および||
条件を分ける必要があります。
私は次のことをしました(上記の解決策によると)
- if [ $TRAVIS_PULL_REQUEST == false && $TRAVIS_BRANCH == "development" ]; then
echo "# Bump version and flyway migrate db";
else
echo "Skip version increment!";
fi
また、.travis.yml
in Travis Lint であり、有効と表示されますが、bashによれば、上記のように以下のように分離できます。これについても言及します SO Question そして私は次のように変更しました
- if [ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "development" ]; then
echo "# Bump version and flyway migrate db";
else
echo "Skip version increment!";
fi
そしてtravis buildが機能しました。上記は&&と||bashで。他の誰かが同様の問題に遭遇した場合に備えて共有するだけです。
提案された回避策のどれも私にとってうまくいきませんでした、代わりにこれを使いました:
- if [[ ( "$TRAVIS_OS_NAME" == "osx" ) && ( "$TOXENV" == "py36" ) ]]; then brew update; fi
Rafの解決策は、条件式を[]で区切ることで私にとってうまくいきました
[ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "develop" ];