将现有(整个)Azure DevOps管道(批量)迁移到基于YAML的管道

时间:2019-09-11 19:04:20

标签: azure build azure-devops yaml azure-pipelines

我想将现有的Azure DevOps管道移至基于YAML的明显优势。问题是其中有很多,每个人都有很多工作。

当我在Azure DevOps中单击时,“查看YAML”链接一次仅显示一项作业。因此,要查看每个管道x作业的YAML并将其移至代码中,将需要进行大量手动工作。

但是对于每个管道,似乎都有一种方法可以“导出” json中的整个管道。我想知道是否有一种类似的方法,如果不是整个文件夹,至少将整个管道转储为YAML。

如果有一个API可以导出相同的API,那么甚至更好。

3 个答案:

答案 0 :(得分:2)

到现在为止,我们所支持的就是您所看到的,使用View YAML复制/粘贴代理作业的定义。要获得一个管道的完整定义,还有另一种解决方法是使用API​​从构建定义中获取 JSON ,将其转换为YAML ,调整语法,如果需要时,更新所引用的任务。

enter image description here

  • 将YAML复制到Azure Devops的YAML编辑器。然后最重要的步骤是调整语法。

用任务名称版本替换 refName键值。为此,您可以转到在github中打开的tasks source code,可以在其中找到内置的任务(注意:请参阅相应任务的task.json文件)

注意:使用此方法的另一个缺点是,您需要非常熟悉YAML语法,以便可以成功调整从JSON转换的内容。

答案 1 :(得分:1)

完成此操作,并且在devblogs上有一篇关于将管道作为YAML导出的博客文章

enter image description here

值得一提的是,新系统知道如何处理此处列出的每个功能:

  • 单项和多项工作
  • 结帐选项
  • 执行计划并行性
  • 超时和名称元数据
  • 需求
  • 时间表和其他触发器
  • 池选择,包括与默认设置不同的作业
  • 所有任务和所有输入,包括优化默认输入
  • 求职条件
  • 任务组展开

实际上,我们知道只有两个领域没有覆盖。

变量

在UI中设置的YAML“阴影”(隐藏)变量中定义的变量。因此,我们不希望将它们导出到YAML文件中,以防您需要在运行时进行更改的能力。如果您在Classic管道中有UI变量,我们会在注释中按名称提及它们,以提醒您需要在新的YAML管道定义中对其进行配置。

时区翻译

YAML中的

cron时间表以UTC表示,而Classic时间表以组织的时区表示。时区处理具有很多优势,因此我们选择不要尝试变得聪明。我们无需进行任何翻译即可导出计划,因此除非您手动进行修改,否则您计划的构建可能会关闭一定的小时数。再次在这里,我们在评论中记笔记以提醒您。

But there won't be support for release pipelines:

没有计划这样做。传统RM管道的执行方式差异很大,以致我无法像传统Build一样对准确性做出有力的保证。此外,在RM和统一YAML管道之间也重新考虑了许多概念。在某些情况下,RM功能没有直接翻译。人们需要考虑管道的设计目的,以使用新的构造来完成并重新实现它。

答案 2 :(得分:0)

我试过 yamlizr https://github.com/f2calv/yamlizr 它非常适合导出发布管道,除了它不导出部署前/部署后条件。我们将这些用于审批门。所以希望在未来的版本中它会得到支持。 但是对于微软来说,他们不支持将发布管道导出到 YAML 听起来像。 https://devblogs.microsoft.com/devops/replacing-view-yaml/#comment-2043