以下导致 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
最佳答案
您对 YAML 语法做出了一些假设,这会导致您出现问题。如果您通过缩进后续行来“扩展”一行 YAML,如下所示:
- The quick brown fox
jumped over the
lazy dog.
这和你写的完全一样:
- 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 脚本,最好的办法可能是使用逐字 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
...这是完全有效的 shell 语法。
关于bash - 有条件地运行脚本在 travis.yml 中不起作用,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38789253/