Запуск скрипта условно не работает в travis.yml, почему?
следующие причины Трэвис не строить вообще. Когда я пытаюсь проверить 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
4 ответов
Вы делаете некоторые предположения о синтаксисе 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, лучше всего, вероятно, использовать оператор verbatim block,|
, например:
- |
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
на Тревис Линта и он показывает, как действительный, но, согласно bash выше можно разделить, как показано ниже, Также упоминается в этом и и я перешел к следующему
- if [ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "development" ]; then
echo "# Bump version and flyway migrate db";
else
echo "Skip version increment!";
fi
и Тревис построить работали. Это имеет смысл, потому что выше действительный способ использования && и // в bash. Просто поделиться на случай, если кто-то еще столкнется с подобной проблемой.
ни один из возможных решений работал для меня, я использовал это вместо этого:
- if [[("$TRAVIS_OS_NAME "= = "osx") & & ("$TOXENV "= = "py36")]]; затем заварить update; fi
решение Raf работало для меня с разделением условных с []
[ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH = = "разработка"];