azure - Azure DevOps 构建管道 - 失败的构建仍会部署到 Azure
问题描述
我正在尝试为示例原型创建 CI/CD 管道。因此,我已经开始非常简单地测试我的基础架构——我使用的是一个几乎未受影响的 ASP.NET Framework Web App 样板(针对 4.6.1)。我完成的步骤是:
- 应用部署到 Azure 应用服务。
- 它的版本控制由 Azure DevOps 托管。
- 已创建、设置和测试具有以下任务的构建管道(任务及其顺序,来自模板):
- Azure 部署选项/设置绑定到存储库 DevOps,因此构建也显示在 Azure 中,如果成功,应该在那里部署。
- Build Pipeline 绑定到 DevOps 内的正确存储库
- 通过推送到主分支来触发构建
下一步是验证由于测试失败或任何其他原因而导致的损坏构建未部署到 Azure 中的生产环境。出于这个原因,我创建了一个失败的测试。
这就是我被难住的地方。构建确实按预期失败,并且“App Service Deploy”任务被跳过,因为它之前的构建任务失败了:
然而,这些损坏的构建仍然会部署到 Azure 和生产中,甚至无需等待管道完成。我正在验证小的视觉更新实际上已经发生了变化。
在完全遍历 DevOps 中的管道(或者甚至开始,如果查找代理需要更长时间)之前,一旦发生推送,构建就会在 Azure 中开始和完成:
(DevOps 仍未完成):
我在这里做错了什么?我理解管道错误吗?我是否错过了某个地方的设置步骤?我迷路了。
编辑 2.2对我在 Azure 中的应用服务中的部署选项的更多说明,与 Daniel 的评论有关:
原来这是问题所在。
这是我在将部署绑定到 DevOps 时唯一可以选择的选项。我不允许选择管道,只能选择项目和分支。在我比较过的教程中,设置是相同的(至少在这个菜单中),但构建不会从存储库触发,但希望管道首先到达适当的步骤,这就是为什么我没有t认为它是罪魁祸首。是否有一些额外的设置,我错过了,以表明它必须寻找管道,而不是直接从分支更改中触发?
解决方案
您在 Azure 门户中设置的部署仅与源代码管理相关联,而不与您的生成定义相关联。因此,每次您提交源代码控制时,都会发生两件事,它们彼此完全断开并并行启动,因为它们侦听相同的存储库以进行更改:
- 一个构建在管道中启动。
- Azure 网站已更新为您刚刚推送到源代码管理的版本,因为它的部署选项已绑定到它。
删除#2,你的问题就会消失。您可以在管道中设置要更新的应用服务,无需在应用服务本身中添加额外的挂钩。
推荐阅读
- html - Bootstrap 4:带有 2 个导航栏的标题(导航栏中的导航栏)
- reactjs - 如何使用 Cypress 在 React App 中拖放?
- java - 循环中的java输入给出不匹配异常
- perforce - p4提交时卡住了
- javascript - 在 Sequelize 中定义和使用模型
- python - 井字游戏 - 无法分配给函数调用
- angularjs - 错误 TS2322:未定义的'不可分配给类型'产品'
- java - 如何在 Android 上使用蓝牙设置输入/输出音频?
- java - 将数组从java返回到shell脚本的方法
- microsoft-teams - 无法访问 Microsoft Graph API