Azure devops 配置VST以在出现错误时正确中止
给定以下Azure devops 配置VST以在出现错误时正确中止,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,给定以下.vsts ci.yml文件 queue: Hosted Linux Preview steps: - script: | false true 预期行为和实际行为不同 预期行为:生成在false命令处失败,true将不会执行 实际行为:构建成功,true在执行false命令后执行 详情: 我希望VSTS构建在第一个命令false时失败。 但是,VSTS也执行第二个命令true,并报告成功。 这意味着构建系统的shell设置不正确。正确的设置是设置pipefail和e
.vsts ci.yml
文件
queue: Hosted Linux Preview
steps:
- script: |
false
true
预期行为和实际行为不同
预期行为:生成在false
命令处失败,true
将不会执行
实际行为:构建成功,true
在执行false
命令后执行
详情:
我希望VSTS构建在第一个命令false
时失败。
但是,VSTS也执行第二个命令true
,并报告成功。
这意味着构建系统的shell设置不正确。正确的设置是设置pipefail
和errexit
。但似乎没有设置errexit
,而且可能也没有设置pipefail
是否有一种方法可以在YAML文件中获得正确的行为,即,
pipefail
和errexit
,而无需在脚本部分使用bash-c
?我知道只要将命令序列移动到shell脚本或Makefile
,我就可以轻松解决问题,我只想知道是否有配置可能让YAML文件在设置了errexit
和pipefail
的shell中执行shell命令,最好是bash
shell。由VSTS创建的bash shell似乎没有设置pipefail
和errexit
标志。有关此问题,请参阅GitHub上的以下问题:
但它们可以在YAML文件中设置,如下所示:
queue: Hosted Linux Preview
steps:
- script: |
set -e ; set -o pipefail
false
true
我认为这取决于代理如何在机器上翻译片段,如果它生成一个包含两行的shell脚本,并且只监视整个脚本的退出代码,那么您所观察到的是设计的。@LexLi First of call,酷,谢谢您为我指出源代码。也许我自己能在那里找到答案。第二,如果它是设计的,那么忽略几十年的构建脚本经验是糟糕的设计,但是我不会对微软的无知感到惊讶。“无知”这个词可能过重了。微软仍在学习macOS和Linux,而VST在其早期就专注于Windows。对我来说,只监视最后一个退出代码的设计是有意义的,并且在Windows上被广泛接受。不过,我对Linux并不熟悉,因此无法进一步发表评论。您可能会在GitHub上创建一个问题,直接ping开发人员,这比您自己扫描代码要快。它们可以帮助进一步解释确切的行为和设计意图。您可以向他们展示Linux的常见做法。