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 应用服务。
- 其版本控制由 Azure DevOps 托管。
- 已创建、设置和测试具有以下任务的构建管道是否执行(任务及其顺序,来自模板):
- Azure 部署 Options/Settings 绑定到存储库 DevOps,因此构建也显示在 Azure 中,如果成功,应该部署在那里。
- 构建管道绑定到 DevOps 中的正确存储库
- 通过推送到 master 分支触发构建
下一步是验证由于测试失败或任何其他原因导致的损坏构建未部署到 Azure 中的生产环境。为此,我创建了一个失败的测试。
这就是我感到困惑的地方。构建确实按预期失败并且 "App Service Deploy" 任务被跳过,因为它之前的构建任务失败:
然而,那些损坏的构建 仍然 甚至无需等待管道完成就可以部署到 Azure 和生产环境。我正在验证小的视觉更新是否确实发生了变化。
在 DevOps 中的管道被完全遍历(甚至开始,如果寻找代理需要更长的时间)之前,一旦发生推送,构建就会在 Azure 中开始和完成:
(DevOps 仍未完成):
我在这里做错了什么?我对管道的理解有误吗?我错过了某个地方的设置步骤吗?我迷路了。
编辑:正如 Josh 所问,这也是我的触发器:
编辑 2.2 我在 Azure 中的应用服务中的部署选项的更多说明,与 Daniel 的评论相关:
原来是这个问题。
这是我在将部署绑定到 DevOps 时唯一可以选择的选项。我不允许选择管道,只能选择项目和分支。在我比较过的教程中,设置是相同的(至少在这个菜单中),但是构建不会从存储库中触发,而是希望管道首先到达适当的步骤,这就是我没有的原因不认为它是罪魁祸首。是否有一些额外的设置,我错过了,以表明它 必须 寻找管道,而不是直接从分支更改中触发?
你在 Azure 门户中设置的部署仅绑定到源代码管理,而不是你的构建定义。因此,每次您提交到源代码控制时,都会发生两件事,它们彼此完全断开并并行开始,因为它们会监听相同的存储库以进行更改:
- 一个构建在管道中启动。
- Azure 网站使用您刚刚推送到源代码管理的版本进行了更新,因为它的部署选项已绑定到它。
删除#2,您的问题就会消失。您在管道中设置要更新的应用服务,您不需要应用服务本身的额外挂钩。
我正在尝试为示例原型创建 CI/CD 管道。因此,我已经开始足够简单来测试我的基础设施——我使用的是 ASP.NET Framework Web App(针对 4.6.1)的几乎未改动的样板。我完成的步骤是:
- 应用已部署到 Azure 应用服务。
- 其版本控制由 Azure DevOps 托管。
- 已创建、设置和测试具有以下任务的构建管道是否执行(任务及其顺序,来自模板):
- Azure 部署 Options/Settings 绑定到存储库 DevOps,因此构建也显示在 Azure 中,如果成功,应该部署在那里。
- 构建管道绑定到 DevOps 中的正确存储库
- 通过推送到 master 分支触发构建
下一步是验证由于测试失败或任何其他原因导致的损坏构建未部署到 Azure 中的生产环境。为此,我创建了一个失败的测试。
这就是我感到困惑的地方。构建确实按预期失败并且 "App Service Deploy" 任务被跳过,因为它之前的构建任务失败:
然而,那些损坏的构建 仍然 甚至无需等待管道完成就可以部署到 Azure 和生产环境。我正在验证小的视觉更新是否确实发生了变化。
在 DevOps 中的管道被完全遍历(甚至开始,如果寻找代理需要更长的时间)之前,一旦发生推送,构建就会在 Azure 中开始和完成:
(DevOps 仍未完成):
我在这里做错了什么?我对管道的理解有误吗?我错过了某个地方的设置步骤吗?我迷路了。
编辑:正如 Josh 所问,这也是我的触发器:
编辑 2.2 我在 Azure 中的应用服务中的部署选项的更多说明,与 Daniel 的评论相关:
原来是这个问题。
这是我在将部署绑定到 DevOps 时唯一可以选择的选项。我不允许选择管道,只能选择项目和分支。在我比较过的教程中,设置是相同的(至少在这个菜单中),但是构建不会从存储库中触发,而是希望管道首先到达适当的步骤,这就是我没有的原因不认为它是罪魁祸首。是否有一些额外的设置,我错过了,以表明它 必须 寻找管道,而不是直接从分支更改中触发?
你在 Azure 门户中设置的部署仅绑定到源代码管理,而不是你的构建定义。因此,每次您提交到源代码控制时,都会发生两件事,它们彼此完全断开并并行开始,因为它们会监听相同的存储库以进行更改:
- 一个构建在管道中启动。
- Azure 网站使用您刚刚推送到源代码管理的版本进行了更新,因为它的部署选项已绑定到它。
删除#2,您的问题就会消失。您在管道中设置要更新的应用服务,您不需要应用服务本身的额外挂钩。