web-dev-qa-db-ja.com

条件付きでスクリプトを実行すると、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
20
user1283776

問題を引き起こしている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

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

37
larsks

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で。他の誰かが同様の問題に遭遇した場合に備えて共有するだけです。

2
Raf

提案された回避策のどれも私にとってうまくいきませんでした、代わりにこれを使いました:

- if [[ ( "$TRAVIS_OS_NAME" == "osx" ) && ( "$TOXENV" == "py36" ) ]]; then brew update; fi
0
MrMeemus

Rafの解決策は、条件式を[]で区切ることで私にとってうまくいきました

[ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "develop" ];
0
Rebekah Apelt