我想将现有的Azure DevOps管道移至基于YAML的明显优势。问题是其中有很多,每个人都有很多工作。
当我在Azure DevOps中单击时,“查看YAML”链接一次仅显示一项作业。因此,要查看每个管道x作业的YAML并将其移至代码中,将需要进行大量手动工作。
但是对于每个管道,似乎都有一种方法可以“导出” json中的整个管道。我想知道是否有一种类似的方法,如果不是整个文件夹,至少将整个管道转储为YAML。
如果有一个API可以导出相同的API,那么甚至更好。
答案 0 :(得分:2)
到现在为止,我们所支持的就是您所看到的,使用View YAML
复制/粘贴代理作业的定义。要获得一个管道的完整定义,还有另一种解决方法是使用API从构建定义中获取 JSON ,将其转换为YAML ,调整语法,如果需要时,更新所引用的任务。
首先,使用Get Build Definition api获取整个定义 一个管道。
调用JSON to YAML converter。复制/粘贴定义的JSON 进入此转换器。
用任务名称和版本替换 refName键值。为此,您可以转到在github中打开的tasks source code,可以在其中找到内置的任务(注意:请参阅相应任务的task.json
文件)
注意:使用此方法的另一个缺点是,您需要非常熟悉YAML语法,以便可以成功调整从JSON转换的内容。
答案 1 :(得分:1)
完成此操作,并且在devblogs上有一篇关于将管道作为YAML导出的博客文章
值得一提的是,新系统知道如何处理此处列出的每个功能:
实际上,我们知道只有两个领域没有覆盖。
变量
在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