azure-devops - 使用 YAML 管道和 gitflow 时如何仅更新 Azure Devops 中的管道?
问题描述
我们目前使用的是经典 Azure 管道(构建和发布管道)。它们运行良好,因为如果我们需要对管道进行更改,只需修改管道并从 UI 安排构建就很容易了。
现在微软正在推动 YAML 管道和基础设施即代码,因此我们计划在我们的下一个项目中使用 YAML 和多阶段管道。
当配置在源代码控制中时,我现在还没有找到只更新管道的方法。例如,假设测试环境的管道由于某种原因中断,我需要通过仅更改 YAML 配置来修复它。我会只对分支进行更改Release
,然后将其合并回develop
分支吗?
我们曾经在经典模式下拥有专用的构建管道和专用的发布管道,因此构建管道将创建一个包,而不管它是在哪个分支上触发的。然后发布管道将被触发,它将检查构建工件来自的分支并使用相应的配置部署包。
这给了我们很大的灵活性,以便我们可以随时随地自动和手动部署版本。我没有看到从 YAML 管道中获得任何好处。
例如,我们可以进行生产构建(master
分支)并在测试环境中使用该构建来尝试重现错误。
当我不能只修改管道而是必须接受来自开发分支的所有更改时,这将如何与 YAML 管道一起工作?仅使用 YAML 构建管道并使用经典发布管道是否可能(或可行)?
解决方案
我们为我们的应用程序使用部署环,我们有一个单一的构建管道,它利用条件逻辑根据源分支包含或排除特定任务。如果您绝对必须拥有不同的管道,我建议将模板文件用于常见步骤(非常类似于经典管道中的任务组)。使用 YAML,您可以制作阶段、作业或步骤模板,因此这些模板超出了任务组的能力。我实施的解决方案如下所示:
- 构建回购
- 模板
- 阶段
- 并行单元测试.yml
- 构建工件.yml
- 发布-artifacts.yml
- 部署.yml
- 步
- pre-build.yml
- 构建.yml
- 构建后.yml
- 单元测试.yml
- 下载-artifacts.yml
- 发布-artifacts.yml
- 部署.yml
- 阶段
- 模板
- 应用程序仓库
- 管道
- 主发布.yml
- 环部署.yml
- [项目文件]
- 管道
构建存储库中的所有模板都被编码为尽可能与服务无关。可以更改/将要更改的所有内容都已参数化。我们甚至使用 YAML 逻辑表达式${[ if eq(parameters.shouldRun, true) }}:
来打开或关闭仅适用于特定环境/环的步骤。我建议阅读这些文档:
推荐阅读
- c# - C# MediateR 作为临时事件总线
- reactjs - 使用 React 在组件之间传输数据
- google-chrome - 如何在 chrome 扩展的隐身窗口中获取身份验证令牌
- java - 使用 Java 定期将记录写入 CSV 文件
- google-cloud-functions - 关于函数命名,“Generic”代表函数名称“helloGCSGeneric”
- api - youtube api 的 get 方法面临 401 问题
- python - Spyder 命令行
- blazor - 如何在 MatBlazor 中使用 TextField 实现千位分隔符格式
- ios - 如何删除字典中元素的下划线及其后面的字符
- python - NoReverseMatch 错误参数未找到,Django 新手