Bash 有条件地运行脚本在travis.yml中不起作用,为什么?
以下内容导致travis根本不构建。当我尝试验证Bash 有条件地运行脚本在travis.yml中不起作用,为什么?,bash,yaml,travis-ci,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 ./.travi
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
您正在对YAML语法进行一些假设,这些假设会给您带来问题。如果通过缩进后续行来“exend”YAML行,如下所示:
- The quick brown fox
jumped over the
lazy dog.
- |
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh
fi
就像你写的那样:
- The quick brown fox jumped over the lazy dog.
这意味着您的shell片段,您已编写为:
- 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
如果您尝试在shell中运行该行,您将得到:
sh: -c: line 1: syntax error: unexpected end of file
如果要在YAML文档中包含多行shell脚本,最好使用逐字块运算符,|
,如下所示:
- 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
或者,您可以正确使用分号:
- 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
…这是非常有效的shell语法。我用larsks尝试了上述解决方案,但它对我不起作用,可能是因为在bash
中,当使用&&
和|
时,需要分离条件
我有以下情况(根据上述解决方案)
我还检查了中的.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
travis build成功了。这有点道理,因为上面是在bash中使用&&和|的有效方法。只是分享,以防其他人遇到类似的问题 建议的解决方法对我都不起作用,我改为:
- if [[ ( "$TRAVIS_OS_NAME" == "osx" ) && ( "$TOXENV" == "py36" ) ]]; then brew update; fi
英国皇家空军的解决方案对我来说是有效的,它用[]分隔条件
[ $TRAVIS_PULL_REQUEST == false ] && [ $TRAVIS_BRANCH == "develop" ];
这很有效。我现在有很多这样的项目。