Azure devops 如果代码质量下降,如何中断Azure DevOps构建

Azure devops 如果代码质量下降,如何中断Azure DevOps构建,azure-devops,azure-pipelines,Azure Devops,Azure Pipelines,我在YAML中实现了一个Azure DevOps构建管道,该管道包含单元测试。如果单元测试失败,构建就会失败——到目前为止还不错 考虑到管道与代码处于相同的repo中,开发人员可以随意修改它 有时开发人员很懒或很匆忙,他们更喜欢摆脱失败的单元测试,而不是修复它们。如何确保开发人员不会从YAML管道中删除单元测试构建任务 在TeamCity中,我会添加一个构建失败条件,将当前构建中的单元测试数量与上一个构建中的单元测试数量进行比较,如果(显著)下降,则构建失败。Azure DevOps中是否有类似

我在YAML中实现了一个Azure DevOps构建管道,该管道包含单元测试。如果单元测试失败,构建就会失败——到目前为止还不错

考虑到管道与代码处于相同的repo中,开发人员可以随意修改它

有时开发人员很懒或很匆忙,他们更喜欢摆脱失败的单元测试,而不是修复它们。如何确保开发人员不会从YAML管道中删除单元测试构建任务


在TeamCity中,我会添加一个构建失败条件,将当前构建中的单元测试数量与上一个构建中的单元测试数量进行比较,如果(显著)下降,则构建失败。Azure DevOps中是否有类似的选项?

在调查该问题后,发现Azure DevOps中目前没有简单的技术解决方案

是的,对于释放管道,您可以使用闸门,但它们不可用于构建管道。是的,Timeline REST API可以用于查询特定构建是否包含特定任务,但问题仍然存在:何时调用REST API来中断构建管道

一种解决方案是触发两个单独的构建管道:一个包含编译步骤,并在YAML中实现,以便开发人员可以更改;另一个包含测试步骤,并在可视化设计器中实现,以便开发人员无法修改

感谢@DanDan和@Rob Bos的帮助,但老实说,我觉得所有这些解决方案都太复杂了。我越是思考最初的问题,就越觉得这个问题不应该用技术来解决。这是一个文化问题:如果团队中的开发人员不相信测试的重要性,他们迟早会找到绕过测试的方法。另一方面,如果他们看到了测试的好处,他们不会忽略它们,即使这只需要取消选中一个复选框


如果团队没有达到我们可以信任的成熟度水平,那么我们应该避免YAML并坚持使用视觉设计师

您可以使用Gate选项(仅在发布定义中可用,在构建定义中不可用!)并添加Gate“invokerestapi”作为部署后条件来实现这一点。通过RESTAPI调用,您可以查询底层数据库(我没有这方面的经验,但我认为这是可能的)。您最好的选择可能是实现一个PS脚本,该脚本统计生成的测试结果的条目(通过trx文件)并将其与以前的生成进行比较,然后直接失败或将偏差写入自定义生成变量,并且您的生成会根据自定义条件失败。请参阅此处了解自定义生成条件,并参阅此处和此处了解如何使用PowerShell编写自定义生成变量。有一个特殊的命令,比如
Write Host###so[task.setvariable…
,可以让你这么做。通过使用它,你可以直接将构建状态设置为failed。我同意@dan的说法:检查该步骤是否可用并在一个gate中启用。你可以通过REST API的