use*_*776 19 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
Run Code Online (Sandbox Code Playgroud)
lar*_*sks 39
您正在对导致问题的YAML语法做出一些假设.如果你通过缩进后续行来"释放"一行YAML,如下所示:
- The quick brown fox
jumped over the
lazy dog.
Run Code Online (Sandbox Code Playgroud)
它就像你写的那样:
- The quick brown fox jumped over the lazy dog.
Run Code Online (Sandbox Code Playgroud)
这意味着你的shell片段,你写成:
- if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh
fi
Run Code Online (Sandbox Code Playgroud)
实际上变成:
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh fi
Run Code Online (Sandbox Code Playgroud)
如果你尝试在shell中运行该行,你会得到:
sh: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
如果要在YAML文档中包含多行shell脚本,最好的办法是使用逐字块运算符|,如下所示:
- |
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh
fi
Run Code Online (Sandbox Code Playgroud)
这将按预期产生:
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh
fi
Run Code Online (Sandbox Code Playgroud)
或者,您可以正确使用分号:
- if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then
./.travis/success_message.sh;
fi
Run Code Online (Sandbox Code Playgroud)
注意;终端前的新功能fi.这导致:
if [ $TRAVIS_BRANCH == "master" && $TRAVIS_PULL_REQUEST == "false" ]; then ./.travis/success_message.sh; fi
Run Code Online (Sandbox Code Playgroud)
...这是完全有效的shell语法.
| 归档时间: |
|
| 查看次数: |
7668 次 |
| 最近记录: |