如何组织 azure-pipeline.yaml 文件
Posted
技术标签:
【中文标题】如何组织 azure-pipeline.yaml 文件【英文标题】:How to organize azure-pipeline.yaml files 【发布时间】:2020-08-31 11:42:51 【问题描述】:我已经阅读了官方文档,将yaml文件放在项目的根目录下。我正在考虑创建某种管道存储库,其中包含几个 yaml 文件,负责不同项目的不同管道工作流程。但 Azure 管道只能识别 azure-pipeline.yaml 文件名。
问题: 显然不可能在同一个文件夹下创建多个具有相同 azure-pipeline.yaml 名称的 yaml 文件。组织 azure 管道 yaml 文件的最佳做法是什么?是不是直接放到项目的根目录下?
【问题讨论】:
你好朋友,这个问题有更新吗?如果您自己找到了此问题的答案,请考虑将其添加为答案,以便有类似问题的会员也可以从中受益。只是一个提醒:) 【参考方案1】:显然不可能用 同一文件夹下的相同 azure-pipeline.yaml 名称。
是的,不能在同一个文件夹下创建多个同名的 yaml 管道。原因是 yaml 管道受版本控制,Azure Devops git 不支持同一文件夹中的两个同名文件...
我们可以做的是在同一个文件夹中创建多个不同名称的管道,例如azure-pipeline.yaml
,azure-pipelines-1.yml
,azure-pipelines-2.yml
等等。
不确定您在编辑 yaml 管道时是否知道此选项:
我们可以在源码管理中轻松更改yaml文件的名称,这里只需要修改路径即可:
组织 azure 管道 yaml 文件的最佳做法是什么? 是不是直接放到项目的根目录下?
假设您拥有一个团队项目,其中包含两个存储库 A 和 B:
如果 A 和 B 都代表一个最终产品的模块,那么 A 和 B 应该有相应的管道。这意味着在大多数情况下,您应该在 RepoA 中至少有一个管道,在 RepoB 中应该有一个。他们都需要对应的azure-pipeline.yaml
文件。
现在如果 RepoA 中的 azure-pipeline.yaml
和 RepoB 中的 azure-pipeline.yaml
有许多相同的变量/任务/作业,我们可以考虑将重复的内容移动到 templates。我们可以在同一个项目中创建一个 RepoC 来存储模板,在这个模板 repo 中,我们不需要在这里创建 yaml 管道。
关于如何在 RepoA 的管道中引用 RepoC 中的模板,请参阅this document。如果源码在github,可以查看Krzysztof
的链接。如果 RepoC 位于 Azure Devops Repos 并且与您的 RepoA 和 RepoB 相同的项目中,您可以采用以下格式:
resources:
repositories:
- repository: templates
type: git
name: RepoC
ref: refs/heads/master
综上所述,功能性repos(有源代码的)应该有相应的yaml管道。如果你想出于某种目的监控一个 repo(没有源代码)中的变化,你也可以在其中有一个 yaml 管道。对于模板仓库,不需要 yaml 管道。
此外,除了 yaml 管道,您有时可能会使用不受版本控制的经典构建/发布管道。见this。
【讨论】:
【参考方案2】:听起来templates 可能就是您要找的东西。这假设您有一个项目/存储库和一个想要拆分的大型管道,以便更容易阅读或推理各个部分。
以链接文档页面为例,您可以像这样定义模板 yaml 文件(例如:include-npm-steps.yml
):
steps:
- script: npm install
- script: yarn install
- script: npm run compile
然后将其作为“模块”包含在主 azure-pipelines.yml
文件中,如下所示:
jobs:
- job: Linux
pool:
vmImage: 'ubuntu-latest'
steps:
- template: templates/include-npm-steps.yml # Template reference
- job: Windows
pool:
vmImage: 'windows-latest'
steps:
- template: templates/include-npm-steps.yml # Template reference
【讨论】:
如果我有多个项目/repo。是否建议在其根文件中为每个 repo 创建一个 azure-yaml 文件,或者创建一个 repo 以一起管理所有 azure 管道 yaml 文件? 在我看来,您应该将主 yaml 文件保留在它描述构建的存储库中。但是,您可能有单独的模板存储库,并在其他存储库中重复使用它们。 @KrzysztofMadej 如果管道涉及超过 2 个存储库,Azure 管道服务如何找到存储模板的第二个存储库? 你应该使用资源。请检查这个问题:***.com/questions/61729574/…以上是关于如何组织 azure-pipeline.yaml 文件的主要内容,如果未能解决你的问题,请参考以下文章