首页 > 解决方案 > 使用 YAML 管道和 gitflow 时如何仅更新 Azure Devops 中的管道?

问题描述

我们目前使用的是经典 Azure 管道(构建和发布管道)。它们运行良好,因为如果我们需要对管道进行更改,只需修改管道并从 UI 安排构建就很容易了。

现在微软正在推动 YAML 管道和基础设施即代码,因此我们计划在我们的下一个项目中使用 YAML 和多阶段管道。

当配置在源代码控制中时,我现在还没有找到只更新管道的方法。例如,假设测试环境的管道由于某种原因中断,我需要通过仅更改 YAML 配置来修复它。我会只对分支进行更改Release,然后将其合并回develop分支吗?

我们曾经在经典模式下拥有专用的构建管道和专用的发布管道,因此构建管道将创建一个包,而不管它是在哪个分支上触发的。然后发布管道将被触发,它将检查构建工件来自的分支并使用相应的配置部署包。

发布管道(经典)

这给了我们很大的灵活性,以便我们可以随时随地自动和手动部署版本。我没有看到从 YAML 管道中获得任何好处。

例如,我们可以进行生产构建(master分支)并在测试环境中使用该构建来尝试重现错误。

当我不能只修改管道而是必须接受来自开发分支的所有更改时,这将如何与 YAML 管道一起工作?仅使用 YAML 构建管道并使用经典发布管道是否可能(或可行)?

标签: azure-devopsyamlazure-pipelinesgit-flow

解决方案


我们为我们的应用程序使用部署环,我们有一个单一的构建管道,它利用条件逻辑根据源分支包含或排除特定任务。如果您绝对必须拥有不同的管道,我建议将模板文件用于常见步骤(非常类似于经典管道中的任务组)。使用 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) }}:来打开或关闭仅适用于特定环境/环的步骤。我建议阅读这些文档:

模板

YAML 表达式


推荐阅读