Azure DevOps 构建管道 - 失败的构建仍会部署到 Azure

Azure DevOps Build Pipeline - A failed build still gets deployed to Azure

我正在尝试为示例原型创建 CI/CD 管道。因此,我已经开始足够简单来测试我的基础设施——我使用的是 ASP.NET Framework Web App(针对 4.6.1)的几乎未改动的样板。我完成的步骤是:

下一步是验证由于测试失败或任何其他原因导致的损坏构建部署到 Azure 中的生产环境。为此,我创建了一个失败的测试。

这就是我感到困惑的地方。构建确实按预期失败并且 "App Service Deploy" 任务被跳过,因为它之前的构建任务失败:

然而,那些损坏的构建 仍然 甚至无需等待管道完成就可以部署到 Azure 和生产环境。我正在验证小的视觉更新是否确实发生了变化。

在 DevOps 中的管道被完全遍历(甚至开始,如果寻找代理需要更长的时间)之前,一旦发生推送,构建就会在 Azure 中开始和完成:

(DevOps 仍未完成):

我在这里做错了什么?我对管道的理解有误吗?我错过了某个地方的设置步骤吗?我迷路了。

编辑:正如 Josh 所问,这也是我的触发器:

编辑 2.2 我在 Azure 中的应用服务中的部署选项的更多说明,与 Daniel 的评论相关:

原来是这个问题。

这是我在将部署绑定到 DevOps 时唯一可以选择的选项。我不允许选择管道,只能选择项目和分支。在我比较过的教程中,设置是相同的(至少在这个菜单中),但是构建不会从存储库中触发,而是希望管道首先到达适当的步骤,这就是我没有的原因不认为它是罪魁祸首。是否有一些额外的设置,我错过了,以表明它 必须 寻找管道,而不是直接从分支更改中触发?

你在 Azure 门户中设置的部署仅绑定到源代码管理,而不是你的构建定义。因此,每次您提交到源代码控制时,都会发生两件事,它们彼此完全断开并并行开始,因为它们会监听相同的存储库以进行更改:

  1. 一个构建在管道中启动。
  2. Azure 网站使用您刚刚推送到源代码管理的版本进行了更新,因为它的部署选项已绑定到它。

删除#2,您的问题就会消失。您在管道中设置要更新的应用服务,您不需要应用服务本身的额外挂钩。