如何组织 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 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何做好组织管理?

前端项目目录如何组织

如何组织代码

Grafana API - 如何切换当前组织

如何避免列组织数据处理和行组织数据处理之间的转换

如何在 Android Studio 中组织布局资源文件? [复制]