给出以下.vsts-ci.yml
文件
queue: Hosted Linux Preview
steps:
- script: |
false
true
预期行为与实际行为不同。
预期的行为:在false
命令处生成失败,true
将不会执行。
实际行为:构建成功,在true
命令之后执行false
。
详细信息:
我希望VSTS构建在第一个命令false
上失败。
但是,VSTS也执行第二个命令true
并报告成功。
这意味着对于构建系统,外壳设置不正确。正确的设置是设置pipefail
和errexit
。但是似乎未设置errexit
,也可能未设置pipefail
。
是否有一种方法可以在YAML文件中获得正确的行为,即pipefail
和errexit
,而无需在脚本部分中使用bash -c
?我知道我可以通过将命令序列移动到Shell脚本或Makefile
中来轻松解决,我只是想知道是否存在一种配置可能性,以使YAML文件在使用{{1}的Shell中执行Shell命令}和errexit
集,最好是pipefail
shell。
答案 0 :(得分:0)
似乎VSTS创建的bash shell没有设置pipefail
和errexit
标志。有关此问题,请参见GitHub上的以下问题:https://github.com/Microsoft/vsts-agent/issues/1803
但是可以在YAML文件中设置它们,如下所示:
queue: Hosted Linux Preview
steps:
- script: |
set -e ; set -o pipefail
false
true