Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure devops 配置VST以在出现错误时正确中止_Azure Devops_Azure Pipelines - Fatal编程技术网

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的常见做法。