如何排除对管道 yaml 文件的更改以触发构建 i azure devops?

Posted

技术标签:

【中文标题】如何排除对管道 yaml 文件的更改以触发构建 i azure devops?【英文标题】:How can I exclude changes to the pipeline yaml file to trigger a build i azure devops? 【发布时间】:2020-09-22 03:06:35 【问题描述】:

使用 Azure devops 和 piplines yaml 文件。开发分支上有一个触发器。但是,当我将更改保存到 yaml 文件时,它会触发新的构建。

发生这种情况是因为对 yaml 文件的更改是由触发器捕获的新提交。

所以我的问题是,如何排除对 yaml 文件的更改以触发新构建?

【问题讨论】:

【参考方案1】:

随着Support for wild cards in path filters 此处宣布的更改,我们现在可以使用通配符:

在管道 YAML 文件中为 CI 或 PR 触发器指定包含和排除分支时,可以使用通配符。但是,在指定路径过滤器时不能使用它们。例如,您不能包含与 src/app//myapp* 匹配的所有路径。一些客户已指出这是不便之处。本次更新填补了这一空白。现在,您可以在指定路径过滤器时使用通配符(、* 或 ?)。

所以你现在可以:

# specific path build
trigger:
  branches:
    include:
    - master
    - releases/*
  paths:
    include:
    - '*'
    exclude:
    - '**/*.yml'
    - '**/*.yaml'

【讨论】:

谢谢,我是专门找 YAML 文件的。【参考方案2】:

您可以指定要包含或排除的文件路径。请注意,分支/标签和文件路径之间的通配符语法是不同的。

# specific path build
trigger:
  branches:
    include:
    - master
    - releases/*
  paths:
    include:
    - docs/*
    exclude:
    - docs/README.md

来源:Build Azure Repos Git or TFS Git repositories - CI triggers - Paths

2021 年 4 月编辑:

路径过滤器不支持通配符。

现在取自同一来源:

您可以指定要包含或排除的文件路径。

# specific path build
trigger:
 branches:
   include:
   - master
   - releases/*
 paths:
   include:
   - docs
   exclude:
   - docs/README.md

当您指定路径时,您必须明确指定要触发的分支。您不能仅使用路径过滤器触发管道;您还必须有一个分支过滤器,并且匹配路径过滤器的更改文件必须来自与分支过滤器匹配的分支。

提示:

路径过滤器不支持通配符。 始终指定相对于存储库根目录的路径。 如果您不设置路径过滤器,则默认情况下会隐式包含 repo 的根文件夹。 如果排除路径,则不能同时包含它,除非将其限定为更深的文件夹。例如,如果您排除 /tools,那么您可以包含 /tools/trigger-runs-on-these 路径过滤器的顺序无关紧要。 Git 中的路径区分大小写。请务必使用与实际文件夹相同的大小写。 您不能在路径中使用变量,因为变量是在运行时评估的(在触发器触发之后)。

【讨论】:

触发器路径不支持通配符——只支持完整的文件名或目录名。我尝试在 Angular 构建中使用 *.json 作为触发器,但它被忽略了。 如果您还使用trigger: none(仅当您希望基于 ADO 中的 PR 策略检查运行管道时使用),此功能是否有效。 @greg - 对于拉取请求,您需要转到分支策略并在那里设置路径过滤器。在此处查看更多信息 - docs.microsoft.com/en-us/azure/devops/repos/git/…

以上是关于如何排除对管道 yaml 文件的更改以触发构建 i azure devops?的主要内容,如果未能解决你的问题,请参考以下文章

仅当特定文件集发生更改时如何触发构建

GitLab CI - 添加标签时避免构建

如何在 yaml 中处理 Azure DevOps 管道中的错误?

Azure Pipelines Stages (YAML) 上的手动触发器

如何排除 gitlab-ci.yml 更改触发作业

Azure Devops Pipeline YAML 中的 Git 标记名称