有条件地运行脚本在travis.yml中不起作用,为什么?

时间:2016-08-05 12:26:32

标签: bash yaml travis-ci

以下原因导致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

4 个答案:

答案 0 :(得分:28)

您正在对导致问题的YAML语法做出一些假设。如果你" exend"通过缩进后续行来生成一行YAML,如下所示:

PharoShortcuts

就像你写的那样:

- The quick brown fox
  jumped over the
  lazy dog.

这意味着您的shell片段,您已将其写为:

- The quick brown fox jumped over the lazy dog.

实际上变成:

  - if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
      ./.travis/success_message.sh
    fi

如果你尝试在shell中运行该行,你会得到:

if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh fi

如果要在YAML文档中包含多行shell脚本,最好的办法是使用逐字块运算符sh: -c: line 1: syntax error: unexpected end of file ,如下所示:

|

这将按预期产生:

  - |
    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

...这是完全有效的shell语法。

答案 1 :(得分:2)

我通过 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 Lint中的.travis.yml,它显示为有效但是,根据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 :(得分:1)

Raf的解决方案适用于我将条件与[]

分开
[ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "develop" ];

答案 3 :(得分:0)

所有建议的解决方法都不适用于我,我使用了它:

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