【问题标题】:What is the YAML equivalent to release pipelines?与发布管道等效的 YAML 是什么?
【发布时间】:2020-12-06 18:16:03
【问题描述】:

我一直在研究 Azure DevOps,但我对一些事情感到困惑:微软似乎强烈建议使用 YAML 管道而不是经典管道;很公平,但他们需要替换经典管道中的所有功能。我的意思是如何用 YAML 管道替换“发布管道”功能?

因此,例如,使用经典发布管道,我可以设置一个管道以部署到具有手动触发器的生产环境(请参阅“用户手动”):

https://docs.microsoft.com/en-us/azure/devops/pipelines/release/triggers?view=azure-devops#pull-request-triggers

与此等效的 YAML 管道是什么?我显然不想要一个自动部署到生产环境的触发器——我总是希望严格手动启动该部署——但帮助文章似乎没有提供任何 YAML 替代方案。

【问题讨论】:

标签: azure security deployment azure-devops azure-pipelines


【解决方案1】:

正如上面的 Daniel cmets,Yaml 管道支持 CD 的多阶段 yaml 管道。您可以查看Azure DevOps Pipelines – Multi-Stage Pipelines and YAML for Continuous Delivery了解更多详情。

Azure devops yaml 多阶段管道和经典发布管道都可以用于 CD,但它们确实有 some difference。据我所知,YAML 管道中的 no 功能可以等同于经典版本中的 manual trigger

目前,手动触发器在 YAML 管道中不支持,请参阅 this discussion。好消息是产品团队已经考虑了功能请求,并且新功能在路线图上。 (或许在 2020 年第三季度的计划中)

根据那里的团队:他们在这里考虑的新功能的范围是能够将阶段标记为“始终手动启动”。如果还有其他阶段依赖于这个阶段,那么这些阶段将继续等待,直到这个阶段执行完毕。

manual trigger 功能在 Yaml 管道中实现之前,我们可能需要等待一段时间。希望新功能能满足您的需求。

【讨论】:

  • 感谢您的回答。看起来 MS 在这方面确实落后于大多数其他 CI/CD 提供商,因为他们还没有实现它。奇怪的是,考虑到它是如此重要的功能。
【解决方案2】:

Microsoft 表示他们的团队在内部使用 Release Flow 分支策略:Release Flow: How We Do Branching on the VSTS Team

发布流程意味着必须创建发布分支才能触发发布,可以这样看:

releases/productname-sprint02

因此,创建这样的分支可以作为手动触发器

在多阶段 YAML 管道中,生产部署阶段应编码为在管道执行是发布分支上下文时触发,使用 condition: 和包含检查的表达式并不难做到:

${{ startsWith(variables['Build.SourceBranch'], 'refs/heads/releases')

附言我最近关于类似主题的博客:Azure DevOps – YAML pipelines and branching strategies

【讨论】:

  • 如果你想通过创建一个 git 分支来发布,那就太好了。我不。这对我来说似乎是一种笨拙的方式。我宁愿在我的 UI 中有一些东西,对于任何给定的成功管道构建,我都可以点击说“发布给 QA”/“发布给 PROD”。
  • 发布流程只是另一种分支策略,如果您想坚持自己的策略,可以使用阶段批准。在这种情况下,只有在某些特定阶段单击“已批准”按钮时才向 QA 或 Prod 发布。
  • 在获得批准之前,这不会导致构建管道出现“挂起”吗?如果由于您不想部署而拒绝批准,那会不会使管道“失败”?那是完全错误的语义;一旦管道建成并经过测试,它应该被认为是成功完成的。部署管道阶段是否完成应该被视为完全独立的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 2019-04-16
相关资源
最近更新 更多