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