Запуск скрипта условно не работает в 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 = = "разработка"];